bzoj3068: 小白树

双带权重心?

枚举分解点x,x子树内找到一个,x子树外找到一个

考虑一般的操作是贪心移动,与子树总权值有关系

所以不妨按照子树权值进行树链剖分

那么一个点子树内的重心一定在重链上。

从重儿子贪心往上走即可

子树外?

设子树外所有点权值总和是c

先倍增二分找到第一个扣除x的子树总权值之后权值>c/2的

再从这个子树的重链往下走,找到第一个子树权值>c/2的。用线段树二分实现

但是bzoj卡空间,然后咕了。

代码.cpp
View Code

找重心:贪心移动,权值树剖!

双信息:枚举分割点

 

posted @ 2019-05-08 21:09  *Miracle*  阅读(273)  评论(0编辑  收藏  举报