双带权重心?
枚举分解点x,x子树内找到一个,x子树外找到一个
考虑一般的操作是贪心移动,与子树总权值有关系
所以不妨按照子树权值进行树链剖分
那么一个点子树内的重心一定在重链上。
从重儿子贪心往上走即可
子树外?
设子树外所有点权值总和是c
先倍增二分找到第一个扣除x的子树总权值之后权值>c/2的
再从这个子树的重链往下走,找到第一个子树权值>c/2的。用线段树二分实现
但是bzoj卡空间,然后咕了。
代码.cpp
找重心:贪心移动,权值树剖!
双信息:枚举分割点