
从根节点到叶子节点的最大距离叫树的半径给定一个无相连通图求半径最小的生成树结论最小半径生成树的半径 原图的半径即minvmaxudG(v,u)vminumaxdG(v,u)其中 dG(v,u)dG(v,u) 是原图中 v,uv,u 之间的最短路距离。构造方法也很简单先求出原图所有点对之间的最短路。对每个顶点 vv计算它的离心率ecc(v)maxudG(v,u)ecc(v)umaxdG(v,u)选一个离心率最小的点 cc它就是图的中心最小半径Recc(c)Recc(c)从 cc 出发做最短路径树例如无权图用 BFS带权图用 Dijkstra。记录每个非根节点的父节点这些边就构成一棵生成树。这棵生成树的半径就是 RR而且不可能有更小的半径。为什么这样最优任意生成树 TT 中两点的距离一定不小于原图中的最短距离所以r(T)≥minvmaxudG(v,u)Rr(T)≥vminumaxdG(v,u)R因此任何生成树半径都至少是 RR。选原图中心 cc最短路径树中从 cc 到每个点的距离等于原图最短距离因此r(T)maxudG(c,u)Rr(T)umaxdG(c,u)R所以可以达到下界 RR。所以答案就是选图的中心做最短路径树。如果只需要半径值输出 RR 即可。对于图边为 1-22-31-33-4。最小半径 1中心节点 3半径最小的生成树最短路径树以 3 为根的边为1-32-33-4这棵树是星形根为 3到所有其他节点距离均为 1因此半径为 1。由于任何生成树至少有一条边半径不可能小于 1所以这是最优结果。图有 4 个点生成树有 44−21644−216 种去重后实际几种。这个图唯一的环是 1-2-3-1三角形生成树必须去掉三角形中的一条边并保留 3-4。去掉 1-2边为 1-3, 2-3, 3-4。半径 1中心是 3到1/2/4距离都是1。去掉 1-3边为 1-2, 2-3, 3-4。半径 1中心是 3到1/2/4距离都是1。去掉 2-3边为 1-2, 1-3, 3-4。半径 1中心是 3到2距离23-1-2到4距离1最大为2等等仔细算第三种去掉2-3保留1-2,1-3,3-4这棵树是一条链4-3-1-2。它的直径是 4 到 2距离 34-3-1-2。树的半径 直径/2 向上取整 ⌈3/2⌉2⌈3/2⌉2中心在边 3-1 中间。所以这棵树半径是2而前两棵半径是1。枚举后取最小确实是1。为什么可以不枚举因为我之前构造的以3为根的最短路径树就是第一或第二种半径1。而数学上保证了任何生成树的半径都不可能小于原图的半径你这个图原图半径就是1。既然你已经找到了半径1的生成树达到了物理极限那它必然是最优的其他枚举结果只会 ≥1≥1所以不用再算了。所以你的思路枚举取最小是绝对正确的定义我的方法是用来快速算出这个最小值的捷径二者结果一致。