01 2019 档案
摘要:传送门 发现 k<=109<13! 所以只有最后几位会变 前面一大段都是固定的 考虑求前面一大段的贡献 n最大就 9 位,直接数位DP就好了(爆搜也是可以的) 考虑后面几位的贡献 用逆康托展开求出每一位的值然后暴力判断就好了 代码有一些细节:
阅读全文
摘要:传送门 斯坦纳树 给一个联通图,求 k 个关键点联通的最小生成树权值 设 f[o][i] 表示当前关键点选择状态为 o ,以点 i 为根的树的最小权值 初始 f[1<<(i−1)][i]=val[i] ,val[i] 表示点 i 的权值 那么从小到大枚举状态 o 对于
阅读全文
摘要:传送门 考虑先随便找一个点作为根,然后再慢慢移动根,这样一步步走到最优的点 设 sum[x] 表示节点 x 的子树的军队数,len(x,y) 表示 x,y 之间边的长度 那么对于根节点 x 的一个儿子 v,考虑把儿子搞为根时,代价的改变量 v 的子树内的军队消耗减少,共减
阅读全文
摘要:传送门 如果没有修改显然就直接点分治 有修改那就动态点分治 动态点分治就是在点分树上维护一些东西,查询时也在点分树上查 因为点分树深度是log的所以可以保证时间复杂度 此题我们需要在点分树上维护 c 和 f f[x] 维护节点 x 的子树中传给它父亲 Fa 的所有路径长度 $
阅读全文
摘要:传送门 十分显然的点分治 枚举所有点作为两点的LCA 开一个桶pd判断之前子树内是否出现过此路程 对于每一个子树都把子树到根的所有路程dis都考虑匹配 如果 pd[K−dis]=1 那么就说明存在匹配 然鹅题目还要求在合法匹配中选最少经过边数的匹配 那么再开一个数组 dd ,$dd[i]
阅读全文
摘要:传送门 点分治入门题 首先可以直接枚举所有两点的lca强行dp 设 f[x][0/1/2] 表示节点 x 在模3意义下,x 的子树所有节点到 x 的距离为 0/1/2 时的方案数 初始 f[x][0]=1 (本身到自己有一种方案) 转移就枚举所有儿子
阅读全文