专栏文章
题解:P14620 [2019 KAIST RUN Fall] Minimum Diameter Spanning Tree
P14620题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @min0f5np
- 此快照首次捕获于
- 2025/12/01 18:32 3 个月前
- 此快照最后确认于
- 2025/12/01 18:32 3 个月前
最小直径生成树模板。
众所周知,边权全为正的树的所有直径中点重合(有可能在一条边上)。直径问题经常考虑这个点。对于一棵树,设点 到直径中点的距离为 ,直径为 ,则 。进一步,如果将 改为 到任一其他点(包括一条边中间),这个等式右侧都会变大。
回到原题,如果已经求出最小直径生成树的直径中点 (如果在边上就在边中间插一个点),那么求出以 为起点的最短路树即为最小直径生成树。
先通过 Floyd 算法求出全源最短路,记为 。枚举答案的直径中点 在边 上,考虑将剩下的 个点划分为点集 ,让 中的点都经过 到 , 中的点都经过 到 。设 ,。那么此时 到所有点最短路的最大值即为 。考虑枚举 ,则可以贪心地取 , 为剩下的点。也就是将所有点按照到 的距离排序, 依次取每个前缀, 分别取剩下的后缀即可。
排序只需要对每个点各做一次,复杂度为 ,全源最短路和枚举 复杂度均为 。
注意到当答案的 确实在 上并且 时,必然有 ,此时 为边 上与 距离为 的点,所以构造是容易的。
总复杂度 。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...