点分治学习笔记

算法很简单,就是每次找重心,然后dfs一遍子树,求出跨越u的路径答案,然后继续。因为每次子树大小会减少一半,所以时间是有保障的。

主要用于树上的路径的问题。这些问题与树的形态无关,只与每两个点之间的路径长度有关。只要你两个点之间路径长度都是一样的,那么答案也就一样

点分治

求是否有路径=k
直接枚举路径,然后树状数组即可
求有多少路径<=k
直接枚举路径,然后树状数组即可
求有多少路径%3=0
直接枚举路径,然后开个桶统计即可
求有多少路径=k且边数最少
直接枚举路径,然后二分即可,前面要去重

点分树
比较难写而且难想的算法
点分树主要用于树上的路径的问题,并且带修和查询,同时是单点查和单点修

我们将找重心的过程重心之间连边,那么这就变成了一颗平衡树,那么我们在查询信息时只要不停往父亲跳,然后计算跨越节点的答案就可以了。记得容斥一下。这就是查询

修改还没学。

posted @ 2024-05-25 15:39  wuhupai  阅读(4)  评论(0编辑  收藏  举报