[bzoj2589]Count on a tree II

Count on a tree II

题解

看到这道题,如果不加强制在线什么的,应该是很容易想到树上莫队的,根据欧拉序很容易解决。

可是由于要强制在线,就不能离线下来做了,于是我们就想到了用树上分块来进行处理。

容易证明,如果我们在一棵节点数为n的树上选择一些点使得树上任意一点到被选择点的距离不会超过S,那么一定存在一种方法使得选择的点数不会超过\left \lfloor \frac{n}{S} \right \rfloor个。

如果我们从深度最大且未被覆盖的点开始,往上找最多S个点,将最远处即与那个点距离达到S的祖先或是根节点的点选择,则一定可以使当前的选择成为这个点子树上的最优解,因为其子树上不会存在点的贡献比它大。

于是,我们就可以先这样选出

posted @ 2020-09-11 21:07  StaroForgin  阅读(9)  评论(0)    收藏  举报  来源