点分治学习笔记
1|0点分治
点分治是一种处理树上路径问题的常见方法。
先引入例题。
求树上有多少条路径的长度是 3 的倍数。
点分治的过程是每次找到当前联通块的重心,然后处理所有跨过重心的路径,然后删去重心,递归每个子树再进行处理。
根据重心的性质,重心的每个儿子的子树大小都不超过
具体的,假设当前枚举的重心为
点分治本身的常数较大。
1|1边分治
边分治和点分治类似,点分治的过程是每次找到重心,边分治则是找到一条边使得两端的子树中较大的最小。
容易发现直接边分治可以被菊花图卡掉,我们每次选择一条边后剩下的联通块大小还是
边分治更适合处理一些不方便减掉贡献的问题。在点分治的过程中,我们需要去掉当前子树的贡献再计算答案,但是边分治每次只有两个子树,可以先 dfs 一边的子树,求出另一边的答案,再反过来处理一次。
我们通过一道题来发现边分治的优势。
给定两棵树,点有点权
如果采用点分治,我们建出当前联通块的点在第二棵树上的虚树后,需要实时维护根的子树个数棵李超树,这样复杂度就假了。
因此只能采用边分治,每次只有两个子树,就只用维护两棵李超树,复杂度就是正确的。
1|2点分树
点分树就是把点分治的过程离线下来,每个点在点分树上的父亲就是点分治过程中上一层的重心,因此有很好的性质,比如深度是
再点分树上,两点间的距离和原树上大不相同,但是两点在点分树上的 LCA 一定是原树上两点路径上的点,这就意味着我们计算两点的距离还是可以通过 LCA 中转。
1|3P6329 【模板】点分树 | 震波
题意:一棵树,有点权,带修,求到一个点距离不超过
思路:这道题要求
数据结构可以就用树状数组。
1|4P6626 [省选联考 2020 B 卷] 消息传递
题意:多次询问距离
思路:离线下来,在点分治的统计答案时处理一个点的所有询问就可以了。因为每个点只会被访问
1|5P4183 [USACO18JAN] Cow at Large P
题意:贝茜被农民们逼进了一个偏僻的农场。农场可视为一棵有
思路:大概想到了一半?
首先,一个农民肯定是在它的深度一半的位置堵住贝茜,那么考虑每个堵住贝茜的位置,设
考虑怎么优化。对于一棵有 1 的贡献的子树,一定有
__EOF__

本文链接:https://www.cnblogs.com/Xttttr/p/18014431.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】