抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

给你一棵树,边有边权,定义 fx=maxi=1ndist(x,i)f_x=\max_{i=1}^n\operatorname{dist}(x,i)qq 次询问,每次给出一个数 ll 求最大的连通块 ss 满足 maxxsfxminxsfxl\max_{x\in s}f_x-\min_{x\in s}f_x\le ln105,q50n\le 10^5,q\le 50

首先假设这棵树的直径的两个端点为 u,vu,v,不难发现 fx=max(dist(u,x)v,x)f_x=\max(\operatorname{dist}(u,x)\operatorname{v,x})。这个用证明直径的方法可以证明。

然后我们需要发现一个性质,那就是将点按照 ff 从大到小排序,那么儿子一定排在父亲的前面。

然后就好办了,我们考虑将点按 ff 从大到小排序,然后我们考虑在上面 two points,一边用并查集维护两个指针所在区间的联通性,插入一个点直接将其儿子合并,删除节点是发现只会删除叶子节点,不会改变连通性,只要把该连通块 size 减掉即可。

这里是代码

评论