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

定义

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

图的绝对中心

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

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

令 为顶点 间的最短路径长,通过多源最短路算法求出所有结点的最短路。

记录点 到其他所有结点中第 小的那个结点。

图的绝对中心可能在某条边上,枚举每一条边 ,并且假设图的绝对中心 就在这条边上。那么距离 的长度为 (),距离 的长度就是 。

对于图中的任意一点 ,图的绝对中心 到 的距离为 。

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

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

对于图上的任意一结点,图的绝对中心到最远距离结点的函数就写作 ,其函数图像如下。

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

图的绝对中心可能在某个结点上,用距离预选结点最远的那个结点来更新,即 。

过程

  1. 使用多源最短路算法(Floyd,Johnson 等),求出 数组;

  2. 求出 ,并将其升序排序;

  3. 图的绝对中心可能在某个结点上,用距离预选结点最远的那个结点来更新,遍历所有结点并用 更新最小值。

  4. 图的绝对中心可能在某条边上,枚举所有的边。对于一条边 从距离 最远的结点开始更新。当出现 的情况时,用 来更新。因为这种情况会使图的绝对中心改变。

例题

最小直径生成树

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

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

例题

SPOJ MDST

timus 1569. Networking the “Iset”

SPOJ PT07C - The GbAaY Kingdom

参考文献

Play with Trees Solutions The GbAaY Kingdom