最小直径生成树

图论 / mdst

本地源文件:docs/graph__mdst.md

最小直径生成树

在学习最小直径生成树(Minimum Diameter Spanning Tree)前建议先阅读 树的直径 的内容.

定义

在无向图的所有生成树中,直径最小的那一棵生成树就是最小直径生成树.

图的绝对中心

求解直径最小生成树,首先需要找到 图的绝对中心图的绝对中心 可以存在于一条边上或某个结点上,该中心到所有点的最短距离的最大值最小.

根据 图的绝对中心 的定义可以知道,到绝对中心距离最远的结点至少有两个.

令 𝑑(𝑖,𝑗)d(i,j) 为顶点 𝑖,𝑗i,j 间的最短路径长,通过多源最短路算法求出所有结点的最短路.

𝑟𝑘(𝑖,𝑗)rk(i,j) 记录点 𝑖i 到其他所有结点中第 𝑗j 小的那个结点.

图的绝对中心可能在某条边上,枚举每一条边 𝑤 =(𝑢,𝑣)w=(u,v),并且假设图的绝对中心 𝑐c 就在这条边上.那么距离 𝑢u 的长度为 𝑥x(𝑥 ≤𝑤x≤w),距离 𝑣v 的长度就是 𝑤 −𝑥w−x

对于图中的任意一点 𝑖i,图的绝对中心 𝑐c 到 𝑖i 的距离为 𝑑(𝑐,𝑖) =min(𝑑(𝑢,𝑖) +𝑥,𝑑(𝑣,𝑖) +(𝑤 −𝑥))d(c,i)=min(d(u,i)+x,d(v,i)+(w−x))

举例一个结点 𝑖i,该结点与图的绝对中心的位置关系如下图.

mdst1

随着图的绝对中心 𝑐c 在边上的改变会生成一个距离与 𝑐c 位置的函数图像.显然的,当前的 𝑑(𝑐,𝑖)d(c,i) 的函数图像是一个两条斜率相同的线段构成的折线段.

mdst2

对于图上的任意一结点,图的绝对中心到最远距离结点的函数就写作 𝑓 =max{𝑑(𝑐,𝑖)},𝑖 ∈[1,𝑛]f=max{d(c,i)},i∈[1,n],其函数图像如下.

mdst3

并且这些折线交点中的最低点,横坐标就是图的绝对中心的位置.

图的绝对中心可能在某个结点上,用距离预选结点最远的那个结点来更新,即 𝑎𝑛𝑠 ←min(𝑎𝑛𝑠,𝑑(𝑖,𝑟𝑘(𝑖,𝑛)) ×2)ans←min(ans,d(i,rk(i,n))×2)

过程

  1. 使用多源最短路算法(FloydJohnson 等),求出 𝑑d 数组;
  1. 求出 𝑟𝑘(𝑖,𝑗)rk(i,j),并将其升序排序;
  1. 图的绝对中心可能在某个结点上,用距离预选结点最远的那个结点来更新,遍历所有结点并用 𝑎𝑛𝑠 ←min(𝑎𝑛𝑠,𝑑(𝑖,𝑟𝑘(𝑖,𝑛)) ×2)ans←min(ans,d(i,rk(i,n))×2) 更新最小值.
  1. 图的绝对中心可能在某条边上,枚举所有的边.对于一条边 𝑤(𝑢,𝑣)w(u,v) 从距离 𝑢u 最远的结点开始更新.当出现 𝑑(𝑣,𝑟𝑘(𝑢,𝑖)) >max𝑛𝑗=𝑖+1𝑑(𝑣,𝑟𝑘(𝑢,𝑗))d(v,rk(u,i))>maxj=i+1nd(v,rk(u,j)) 的情况时,用 𝑎𝑛𝑠 ←min(𝑎𝑛𝑠,𝑑(𝑢,𝑟𝑘(𝑢,𝑖)) +max𝑛𝑗=𝑖+1𝑑(𝑣,𝑟𝑘(𝑢,𝑗)) +𝑤(𝑢,𝑣))ans←min(ans,d(u,rk(u,i))+maxj=i+1nd(v,rk(u,j))+w(u,v)) 来更新.因为这种情况会使图的绝对中心改变.

实现

---|---

### 例题

  * [CodeForce 266D BerDonalds](https://codeforces.com/contest/266/problem/D)

## 最小直径生成树

根据图的绝对中心的定义,容易得知图的绝对中心是最小直径生成树的直径的中点.

求解最小直径生成树首先需要找到图的绝对中心.以图的绝对中心为起点,生成一个最短路径树,那么就可以得到最小直径生成树了.

实现

---|---

例题

SPOJ MDST

timus 1569. Networking the "Iset"

SPOJ PT07C - The GbAaY Kingdom

参考文献

Play with Trees Solutions The GbAaY Kingdom

本页面最近更新: 2026/1/7 08:56:54,更新历史 发现错误?想一起完善?在 GitHub 上编辑此页! 本页面贡献者:ShaoChenHeng, Enter-tainer, StudyingFather, Tiphereth-A, Alisahhh, billchenchina, Early0v0, iamtwz, Ir1d, ksyx, leoleoasd, Marcythm, mcendu, opsiff, ouuan, Suiseiseki-2016, TrisolarisHD, wplf 本页面的全部内容在CC BY-SA 4.0SATA 协议之条款下提供,附加条款亦可能应用