专栏文章

题解: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 个月前
查看原文
最小直径生成树模板。
众所周知,边权全为正的树的所有直径中点重合(有可能在一条边上)。直径问题经常考虑这个点。对于一棵树,设点 xx 到直径中点的距离为 dxd_x,直径为 DD,则 D=2maxxdxD=2\max_x{d_x}。进一步,如果将 dxd_x 改为 xx 到任一其他点(包括一条边中间),这个等式右侧都会变大。
回到原题,如果已经求出最小直径生成树的直径中点 CC(如果在边上就在边中间插一个点),那么求出以 CC 为起点的最短路树即为最小直径生成树。
先通过 Floyd 算法求出全源最短路,记为 d(u,v)d(u,v)。枚举答案的直径中点 CC 在边 (u,v,w)(u,v,w) 上,考虑将剩下的 n2n-2 个点划分为点集 U,VU,V,让 UU 中的点都经过 uuCCVV 中的点都经过 vvCC。设 L=maxxU(d(u,x))L=\max_{x\in U}(d(u,x))R=maxxV(d(v,x))R=\max_{x\in V}(d(v,x))。那么此时 CC 到所有点最短路的最大值即为 max{L,R,L+R+w2}\max\{L,R,\frac{L+R+w}{2}\}。考虑枚举 L=d(u,x)L=d(u,x),则可以贪心地取 U={yd(u,y)L}U=\{y|d(u,y)\leq L\}VV 为剩下的点。也就是将所有点按照到 uu 的距离排序,UU 依次取每个前缀,VV 分别取剩下的后缀即可。
排序只需要对每个点各做一次,复杂度为 O(n2logn)O(n^2\log n),全源最短路和枚举 U,VU,V 复杂度均为 O(n3)O(n^3)
注意到当答案的 CC 确实在 (u,v)(u,v) 上并且 max{L,R,L+R+w2}=D\max\{L,R,\frac{L+R+w}{2}\}=D 时,必然有 LRw|L-R|\leq w,此时 CC 为边 (u,v)(u,v) 上与 uu 距离为 R+wL2\frac{R+w-L}{2} 的点,所以构造是容易的。
总复杂度 O(n3)O(n^3)

评论

0 条评论,欢迎与作者交流。

正在加载评论...