摘要: 学习博客:https://www.cnblogs.com/ECJTUACM-873284962/p/7643445.html 斯坦纳树: 给定k个点,要求将k个点联通,且权值和最小 f[i][s]表示以i为根,当前联通集合为s的最小代价 转移方程有两层: 第一层,通过连通状态的子集进行转移 f[i] 阅读全文
posted @ 2019-02-25 08:55 Tartarus_li 阅读(474) 评论(0) 推荐(0) 编辑
摘要: 先留个坑,输出方案的地方还得再想想 阅读全文
posted @ 2019-02-22 23:08 Tartarus_li 阅读(593) 评论(0) 推荐(0) 编辑
摘要: 考虑这样一个问题: 给定n个数,每次询问一个数q,可不可以由这n个数组成 设n个数中最小的数为a,对于0-a-1中的每个点i,向(i+xj)%a连一条权值为xj的边 跑一遍最短路,则距离数组的意义是在模a意义下,在所有可以组成的模a剩余i的数中,最小的数是多少 如果可以到达点i,则i+k*a都可以到 阅读全文
posted @ 2019-02-22 09:35 Tartarus_li 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 对于组合数的奇偶性: 根据卢卡斯定理,相当于是在p进制下的分解,对于每一C(n,m),如果n,m不同,那组合数就是偶数 所以组合数C(n,m)为奇数当且仅当 n&m==m 然后就是dp了 设f[i]为以i结尾的方案数 枚举i的子集j,如果j的位置在i的后面且i&j==j,则更新 答案就是所有f[a[ 阅读全文
posted @ 2019-02-21 21:35 Tartarus_li 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 这道题真的难写啊,细节超级多 一看就不能直接背包 考虑到所有的重量都是a*2^b的形式 所以可以按照数位进行分层dp 设f[i][j]表示容量j*2^i时最大的价值(此时的状态) 在每层dp内,只转移b为i的物品 f[i][j]=max(f[i][j],f[i][j-a]+val) 每层处理完之后, 阅读全文
posted @ 2019-02-21 20:24 Tartarus_li 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 这道题有结论啊啊啊 但是不会证啊qaq 最小就是尽量让少的点能够相互到达,每层的边都与上一层的边反向 最大要找到树的重心(这都能写错),然后对于每个子树,尽量让根连出的子树大小等于连到根的子树大小 也就是尽量取 n/2 转化成了0/1背包问题 套路: 对于 ∑a ≤ n observation: 不 阅读全文
posted @ 2019-02-21 15:43 Tartarus_li 阅读(172) 评论(0) 推荐(0) 编辑
摘要: dp[i][j]表示以i为根,且i在原图上对应的点为点j的方案数 可能多个点会对应到原图中的一个点,所以要容斥处理一下 枚举都对应到了哪些点 dp转移方程为 dp[u][j]=π(v∈son[i])∑(k∈adj[j])dp[v][k] 子树间方案数是乘起来啊qaq 然后就是容斥了 bin数组是2^ 阅读全文
posted @ 2019-02-21 13:57 Tartarus_li 阅读(189) 评论(0) 推荐(0) 编辑
摘要: extend数组:A串的每个后缀与B串的LCP next数组:B串的每个后缀与B串的LCP 题目:hihocoder 扩展kmp 主题代码: 阅读全文
posted @ 2019-02-20 15:42 Tartarus_li 阅读(109) 评论(0) 推荐(0) 编辑
摘要: WC陈俊锟课件 学会了可删除堆 例题1 : 求图中两点间路径上最大(最小)权值 无修改设圆点权值为本身,方点权值为点双中的最大(小)权值查询链上最大值并查集?? 有修改 设圆点权值为本身,方点权值为点双中非根节点的最大(小)权值 修改时修改父方点的权值(堆维护) 注意: 查询时如果LCA是方点,还要 阅读全文
posted @ 2019-02-20 09:42 Tartarus_li 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 割点 在无向连通图G上进行如下定义: • 割点:若删掉某点P后,G分裂为两个或两个以上的子图,则称P为G的割点。 • 割点集合:在无向连通图G中,如果有一个顶点集合,删除这个顶点集合以及与该点集中的顶点相关联的边以后,原图分成多于一个连通块,则称这个点集为G的割点集合。• 点连通度:最小割点集合的大 阅读全文
posted @ 2019-02-19 15:15 Tartarus_li 阅读(289) 评论(2) 推荐(0) 编辑