【学习笔记】边分治

Page Views Count

算法思想#

和点分治类似,边分治每次选一条边,考虑跨过这条边的路径贡献,为了保证复杂度,会让两边子树大小尽量接近。

发现菊花图无论怎么分治都是无效的,考虑将原树三度化,具体做法是如果 u 有两个儿子,就新建一个节点连接第二个儿子,如果还有更多的儿子,就再新建节点与上一次新建的节点当前的儿子相连,这样复杂度是正确的。

具体过程和点分治类似:求当前的子树大小,求当前的重心边,递归处理子问题。

边分治具有优美的性质:每次分治只会考虑两棵子树之间的贡献,也就完全不需要点分治中容斥掉自己贡献的操作。缺点是点数翻倍。

例题#

Luogu-P4565 CTSC 2018 暴力写挂#

在边分治过程中,某两个子树的 LCA 一定之和分治中心父亲一侧子树的节点有关,所以式子可以写成形如 valu+valvdepth(LCA(u,v))。将分治边两侧子树视作黑白两种颜色,那么就是在第二棵树上求异色点权最大值,具体可以建虚树,枚举 LCA(u,v)

Luogu-P4220 WC 2018 通道#

依旧是第一棵树边分治,第二棵树建虚树,现在每个节点有点权,固定了第二棵树的 LCA,剩下可以看作对第三棵树求一个带端点点权的有权直径,由于边权非负,容易证明这满足所有的直径性质,那么对虚树每个子树维护然后合并就行了,实际上要维护两条同色直径,合并时求一下异色直径。(只维护一条异色直径可能出现端点不是所有同色节点的最长距离对于端点的情况)

作者:SoyTony

出处:https://www.cnblogs.com/SoyTony/p/Learning_Note_about_Edge_Centriod_Decomposition.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   SoyTony  阅读(106)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
历史上的今天:
2022-12-28 【学习笔记】Link Cut Tree
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示