树分块 学习小记
Part 1 树分块-树上撒点 简介
树分块顾名思义就是在树上分块,类比树链剖分一样将整棵树划分成很多邻域块,我们希望去寻找到较优的分界点。
Part 2 随机撒点与确定性算法
随机撒点
我们引出一个直观的想法,就是我们可以在树上随机撒点,这样在撒 \(O(\frac{N}{B})\) 个点的情况下每一个点到它祖先上最近的一个关键点的距离是期望 \(O(B)\) 的,证明感性理解吧,毕竟是随机的。
随机化算法大多都有常数大的特点,在分块这种高复杂度算法下的大常数非常致命,我们需要一个更加稳定的分块方式,要求它是确定性的,且能够满足要求的撒点方式。
确定性算法
从最难覆盖的点入手,我们将所有点按 \(dep\) 从大到小排序,每一个点都判断它祖先上的至多 \(O(B)\) 个点中有没有关键点,如果有,则该点已经合法,如果没有,则将它的第 \(B\) 级祖先标记为关键点,使其覆盖更多的非关键点。因为已经排了序,所以不会出现子树内覆盖不了的情况,因为每个点都至少覆盖了 \(B\) 个点,所以总点数是 \(O(\frac{N}{B})\) 的。
可以在关键点上预处理信息,或者从关键点往下转移来跑莫队。

浙公网安备 33010602011771号