整体二分 + 树状数组.
- 如果断掉一个点,将经过它的链给撤去,就会比较麻烦.换一个思路,二分答案 $mid$ ,如果所有权值 $\geq mid$ 的链都经过了它,那么真实答案就 $\leq mid$ ,否则 $\geq mid$ .
- 于是只加入权值 $\geq mid$ 的链,判断该点被覆盖的次数.链的覆盖有一个比较经典的套路,若一条链首尾是 $u,v$ ,就将 $u,v$ 处的权值 $+1$ ,将 $u,v$ 的 $lca$ 以及 $lca$ 的父亲节点的权值 $-1$ ,查询一个点 $x$ 被覆盖的次数,就是查询子树 $x$ 内所有点的权值和.这个可以用一个树状数组来实现.
- 这些操作是满足整体二分的要求的,所以再套一个整体二分一起处理.时间复杂度 $O(nlog^2n)$ .
1 |
|