2025 hdu round8
2025 杭电多校 round8 补题
1010 - 最好的位置
给一棵树,给一个空集依次加入点 \(u_1,u_2,\cdots\) ,每次加入点求这个点集的直径大小。
这里证明一下:设当前直径为 \((a,b)\) ,则加入新点 \(x\) 后直径只可能为 \((a,b),(a,x),(b,x)\) 其中一个。
这相当于加入一个点 \(x\) 求 \(\max_u(\operatorname{dis}_{x,u})\) ,假设 \(\operatorname{dis}_{x,u}>\max(\operatorname{dis}_{x,a},\operatorname{dis}_{x,b})\) ,分为三种情况:
- \(x\) 在路径 \((a,b)\) 上,则取其一端可以得到 \(\operatorname{dis}_{a,u}>\operatorname{dis}_{a,b}\) ,矛盾。
- 若 \(x\) 不在路径 \((a,b)\) 上,但 \((x,u)\) 和 \((a,b)\) 有交集,则取其一端可以得到和情况 1 一致的情况。
- 若 \(x\) 不在路径上且没有交集,连接任意 \((a,b),(x,u)\) 上各一点的路径,也可以推出类似的情况。
三种情况全部矛盾,则原命题得证。
这揭示了为什么树上二次 dfs 得到的一定是直径,事实上从一个点出发找距离最远的点,一定会落到直径的某个端点上,可以看看 oiwiki 的证明。

浙公网安备 33010602011771号