中秋节考试==30分,咳咳咳,T2对我来说还是很有价值的,其实题解并不难,考试时候是真的不好想,这里写一篇题解啦。
题意就是给一棵树,并标记一些点,每次操作分为两种,要么删边建边(保证还是树),要么就是询问当前树上有多少个点到每个标记点的距离不超过给定值d
有一种做法是换根dp,听起来这么高级,我就不细说了(我也不怎么懂,咳咳咳)
还有一种做法就是求出标记点中距离最远的一对点,然后其他点到这两个点距离的最大值,与d比较,这个最大值也就是每个点离所有标记点的距离的最大值
图中红色为标记点,其实自己手动推一推也很容易知道上述结论成立,用反证法证明即可
用类似于两边dfs或bfs求直径的方法求出最远的两个点,只需要加上判断是否被标记来限制更新即可,最后再加一遍bfs判断每个点到这两个点的距离较大值是否超过d即可