随笔分类 - Algorithm --- 点分治
摘要:"题面" 题解 考虑最小化dis(x,y) 这里需要对一种奇怪的最小生成树算法:Boruvka算法有深刻的理解。 考虑该算法的执行过程,我们可以考虑进行点分治,每次找到离分治重心最近的点,然后将分治重心的所有子树的点全部向这个点连边,边数是O(子树大小)的,所以总边数
阅读全文
摘要:"题面" 题解 树链剖分 + 主席树 先考虑一个简单一点的问题: "【LNOI2014】LCA" 我们考察dep[LCA(i,x)]的性质,发现它是i和x的链交的长度。 那么对每个i所在的链打一个区间加标记,询问时算一下x所在的链的区间和即可。 如果有$l \
阅读全文
摘要:"题面" 题解 强行将最短路和点分治~~(长链剖分)~~融合在一起的题目 构建出字典序最小的最短路树之后,就可以用点分治来解决了 不过有一些细节要注意: 这样建出的最短路树是123 而不是12,13 ~~相信这组美妙的数据可以帮助你调错~~ "再来一组数据" 这组hack数据的核
阅读全文
摘要:题面 题解 点分治大火题。。。 设白边数量为a,黑边为b,则2min(a,b)≥max(a,b) 即2a≥b&&2b≥a 考虑点分治时如何统计答案: 2(a1+a2)≥b1+b2 $\therefore 2a_1-b_1\g
阅读全文
摘要:题面 题解 树上求点对数目的题大多都是点分治解决 路径统计中有一个问题,如果现在求出从上到下的链长a,从下到上的链长b和深度c, 则: a×10c+b≡0(modm) 两边同除以c,得 $ a + b\times10^{-c}\equiv0(m
阅读全文
摘要:"题面" 题解 感觉和CDQ分治一样套路啊 首先,构建出点分树 对于每一层分治重心,求出它到子树中任意点的距离 然后twopointers计算满足小于等于K的点对数目,加入答案 但是可能会算重,那么就减去子树内两两点之间的贡献即可。 代码 cpp include include inc
阅读全文