[学习笔记]边分治

基于边的一种分治。统计过中心边的所有路径

可以类比点分治学习

 

构造:

每次找中心边(使得两侧的sz的最大值最小),然后递归下去

菊花图会卡成链,构造变成O(n^2)。

 

其实复杂度和度数相关

考虑转化成二叉树

三度化

法一:把所有儿子依次加一个点串起来

 

法二:

 如果儿子多于2个,建立两个儿子虚点,把真正儿子奇偶分类给两个虚点

虚点放在n后面,最后会再处理到

 所以其实边分治的分治树上的点有4*n

本来n个点,rebuild变成2*n

而分治树除了叶子别的点都是边(类似于kruskal重构树),所以总共4*n个节点

性质:

二叉树

 

优劣:

优:1.二叉树儿子少,讨论减少了很多。复杂度基本严格logn

边分树儿子常数个(为2),每个点在这一层只有两种所属

边分树也是二叉树,为边分树合并提供条件

 

劣:2.虚点必须不影响答案

 

例题:

bzoj2870最长道路tree——边分治

边分树使得每个点两个属性:[WC2018]通道

边分树是二叉树支持合并: [CTSC2018]暴力写挂——边分树合并

 

动态边分治

和点分治一样

分治树上只有了2个儿子,处理儿子的贡献就很好办了

关键还是避免虚点虚边的影响了

 

Qtree4——动态点分治

把虚点设置为黑点。也就可以边分治做了

posted @ 2019-02-25 12:01  *Miracle*  阅读(3285)  评论(3编辑  收藏  举报