题解:
由题,危险程度就是树的直径, 断开边后会得到两个联通块, 假设两个联通块的直径分别为 $l_1,\, l_2$,
根据直径的性质, 连接两个联通块后新的直径长度最小是
$\max\{ l_1, l_2, \left \lceil \frac{l_1}{2} \right \rceil + \left \lceil \frac{l_2}{2} \right \rceil + 1 \}$。
然后我们考虑如何维护它, 由于合并两个联通块后新的直径的两端点一定会在原来的直径端点的并中产生,
可以处理每一个子树的直径端点, 每次考虑 $i$ 到 $fa_i$ 的边时只需分别求出两个块的直径端点即可,
在每个点上维护子树前缀联通块和后缀联通块的直径端点即可快速合并。
标程:
1 |
|