[学习笔记]动态点分治

首先要会点分治

点分治——树上路径统计

点分治有什么好处?我们为什么不直接用树形dp?

它多用了一个logn的代价,使得我们每次面对的都是过重心rt的路径。

这样,我们可以灵活用子树来处理。

而树形dp必须一次考虑所有过x的所有路径。必须还要多处理一个“和x有关”的信息,多了O(n)的时空。

点分治由于同一层不用考虑其他路径,所以复杂度和思维含量大大降低。

(分治都是这样干的。。)

然后需要修改。

动态点分治出现。

Qtree4——动态点分治

[ZJOI2015]幻想乡战略游戏——动态点分治

基本处理思想是,先点分治一遍找到分治树结构。

每个分治树上的点维护一些信息。

一般包括:自己管辖区域路径过自己的信息(这个是为了统计答案需要),和自己管辖区域对分治树father的影响(这个是为了更新迅速、拆解方便、不重复统计等。因为自底向上更新,只有一个father。不用枚举保存father的子树)

(子树的并不用维护,因为每次修改查询自底向上会处理到)

(我)经常还用的数组是:dis[x][d],x到深度为d的father的距离。以及dep[x]x分治树的深度。

修改一般都自底向上修改。复杂度基于分治树高度的logn

查询差不多。

关键是处理好信息的维护。

分治的关键是:

1.可以有针对性地处理当前贡献。都是过mid的点对等等。

2.情况独立于其他的分治树节点。即划分子问题思想。这也为动态分治的方便维护打下坚实基础。

3.层数的logn加上情况独立,使得总复杂度是O(nlogn),本质上的节省统计次数,在于当前层的合并有针对性,

可以左右许多东西,利用乘法原理,乘法分配律,交换律,一起统计。

原文地址:https://www.cnblogs.com/Miracevin/p/10038984.html