社区讨论
翻译
CF455CCivilization参与者 4已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mi6ng5dq
- 此快照首次捕获于
- 2025/11/20 07:44 4 个月前
- 此快照最后确认于
- 2025/11/20 07:44 4 个月前
翻译:给出一些点,他们之间初始存在一些边,给出两种操作,第一种是查询某个点所在的树的直径,另一种是将两个树合并,要求使合并后的树的直径最小。
简单的分析:
首先算取没做操作前的连通块里的树的直径,也就是先dfs一遍,找到深度最大的点,然后从这个点再搜,找到的最远的距离就是这棵树的直径,因为可以证明从根搜深度最大的点一定是树的直径的一个端点,因为它可以通过到达次大的深度的点或者找到与它公共祖先不在根处的获得树的直径。
然后每次合并,我们可以知道得到的新的树的直径是
max{max{L1,L2},L1+12+L2+12+1}
然后利用并查集记录连通块即可。
yjjrchen_zhe
回复
共 3 条回复,欢迎继续交流。
正在加载回复...