简介

无向图中某一点(可以在顶点上或边上),这个点到所有点的最短距离的最大值最小,那么这个点就是 图的绝对中心。

无向图所有生成树中,直径最小的一个,被称为 最小直径生成树。

图的绝对中心的求法

下文设 \(d(i, j)\) 为顶点 \(i,j\) 间的最短路径长。

首先我们考虑枚举每一条边 \((u, v)\),长为 \(L\),并假设绝对中心 \(p\) 在这条边上并且距离 \(u\) 长为 \(x(\le L)\)。

对于图中一点 \(i\),\(p\) 到 \(i\) 的距离可以写作 \(d(p, i) = \min(d(u, i) + x,\ d(v, i) + (L - x))\)。

那么显然可以看出 \(d(p, i)\) 的函数图像是一个 两条斜率相同的线段构成的折线段。

于是 \(p\) 到最远点距离的函数可以写作 \(f = \max\limits_{1\le i\le n}\{d(p, i)\}\),图像是一堆折线组成的 更加曲折的 折线,如图(来源):

图中的 \(\alpha\) 即为文中的 \(x\),\(\omega_{u, v}\) 即为 \(L\),\(w_{1\cdots n}\) 为图中异于 \(u, v\) 的点。

那么答案即为图像中的最低点,横坐标即为绝对中心的位置。


如何得到最低点?不难观察到最低点必然是两折线的交点。

对于图中的两点 \(i, j\),若 \(d(u, i) \ge d(u, j)\) 且 \(d(v, i) \ge d(v, j)\),那么显然这个 \(j\) 是丝毫不用考虑的——可以看出 \(d(p, j)\) 的函数图像是完全位于 \(d(p, i)\) 下方的,最低点显然不会在此。

这样筛出的 \(t\) 条折线会有 \(t - 1\) 个交点,那么只要根据这些交点更新答案即可。

\(O(t^2)\) 暴力枚举?大可不必。可以观察到,有一个性质,若我们将这些折线 按 \(d(u, i)\) 的大小 升序排序,那么对应 \(d(v, i)\) 的大小是 递减的。

于是排序后相邻两折线必定会有交点。

图的绝对中心的实现

设 \(adj(i, j)\) 为结点 \(i, j\) 间的直接距离(边长),\(d(i, j)\) 如上文所述,\(rk(i, j)\) 为距离点 \(i\) 第 \(j\) 远的点,\(f\) 即上文的函数。

这里 \(ans\) 表示最远距离。

  1. 首先使用多源最短路算法(Floyd,Johnson 等)求出 \(d\) 数组。
  2. 求出 \(rk\),对于每一个 \(i\),按关键字 \(d(i, j)\) 降序排序。
  3. 然后对于每一个点或边对答案进行更新:
    • 可能在点上:对于每一个点 \(i\),用相对较远的点更新:\(ans \leftarrow \min(ans, d(i, rk(i, 1)))\)。
    • 可能在边上:对于每一条边 \((i, j)\),从距离 \(i\) 最远的点开始验证——对于所有的 \(k(\le n)\):
      • 若 \(d(j, rk(i, k-1)) \le d(j, rk(i, k))\),因为 \(rk\) 是根据 \(d(i, \cdots)\) 排序的,那么两者组合,发现这个对答案无贡献,不能计算,跳过。
      • 否则就是 \(f\) 上的一个可能为答案的点(交点)。更新答案:\(ans\leftarrow \min(ans, \dfrac{d(i, rk(i, k)) + d(i, rk(i, k - 1)) + adj(i, j)}{2})\)。

最后 \(ans\) 即为所求。如果需要具体位置需要特别地在更新 \(ans\) 时记录。

复杂度 \(O(n^3 + nm)\) 或 \(O(nm\log n + nm)\),区别在于多源最短路的求法。对于无权图还可以直接 Bfs 得到更优秀的效率。

最小直径生成树(MDST)的求法

根据定义,易知图的绝对中心必定为 MDST 直径的中点。

那么只要得到绝对重心,MDST 并不难求——从绝对中心开始,生成一个最短路径树即为 MDST。

显然 MDST 的直径大小为 \(ans\times 2\)。

习题

  • BZOJ 2180 - 最小直径生成树 / SPOJ MDST - Minimum Diameter Spanning Tree 【参考代码】
  • SPOJ PT07C - The GbAaY Kingdom 【参考代码】
  • Codeforces 266D - BerDonalds

后记

【学习笔记】最小直径生成树(MDST)的更多相关文章

  1. Hackerrank--Savita And Friends(最小直径生成树MDST)

    题目链接 After completing her final semester, Savita is back home. She is excited to meet all her friend ...

  2. bzoj2180: 最小直径生成树

    Description 输入一个无向图G=(V,E),W(a,b)表示边(a,b)之间的长度,求一棵生成树T,使得T的直径最小.树的直径即树的最长链,即树上距离最远的两点之间路径长度. Input 输 ...

  3. [学习笔记]最小割之最小点权覆盖&&最大点权独立集

    最小点权覆盖 给出一个二分图,每个点有一个非负点权 要求选出一些点构成一个覆盖,问点权最小是多少 建模: S到左部点,容量为点权 右部点到T,容量为点权 左部点到右部点的边,容量inf 求最小割即可. ...

  4. [学习笔记]最小割树(Gomory-Hu Tree)

    最小割树(\(\mathcal{Gomory-Hu Tree}\))简明指南 对于单源最短路径,我们有\(SPFA\)和\(Dijkstra\),对于多源最短路径,我们有\(Floyd\):对于两点间 ...

  5. Spring学习笔记—最小化Spring XML配置

    自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bean的依赖关系. 自动 ...

  6. OpenCV 学习笔记03 边界框、最小矩形区域和最小闭圆的轮廓

    本节代码使用的opencv-python 4.0.1,numpy 1.15.4 + mkl 使用图片为 Mjolnir_Round_Car_Magnet_300x300.jpg 代码如下: impor ...

  7. Linux 学习笔记 1 使用最小的系统,从分区安装系统开始

    我们常用的linux系统在安装过程中大多都省略了对系统进行分区的操作,以至于后期,不了解什么是分区以及分区当中最基本的一些概念, 我们不说最细的知识,只求了解这个过程,那直接步入正题,开始第一节的学习 ...

  8. 算法笔记_164:算法提高 最小方差生成树(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 给定带权无向图,求出一颗方差最小的生成树. 输入格式 输入多组测试数据.第一行为N,M,依次是点数和边数.接下来M行,每行三个整数U,V, ...

  9. 仙人掌&圆方树学习笔记

    仙人掌&圆方树学习笔记 1.仙人掌 圆方树用来干啥? --处理仙人掌的问题. 仙人掌是啥? (图片来自于\(BZOJ1023\)) --也就是任意一条边只会出现在一个环里面. 当然,如果你的图 ...

随机推荐

  1. 删除ceph集群mds

    ceph集群新搭建以后是只有一个默认的存储池rbd的池 ## 创建文件接口集群 1.创建一个元数据池 [root@mytest ~]# ceph osd pool create metadata 20 ...

  2. Java解释单链表中的头插法以及尾插法

    单链表属于数据结构中的一种基本结构,是一种线性结构,在此使用Java对其中的头插法以及尾插法进行解释. 首先定义好链表中的节点类: 其中,data代表节点所存放的数据,next代表指向下一节点 对于单 ...

  3. 图解HTTP简单笔记【上】

    第一章 了解WEB及网络基础(省略了TCP/IP的知识点) 1.1.使用HTTP协议访问web  当我们在主机的浏览器的地址输入URL之后 请求将回发送至目标服务器 目标服务器在接受到响应请求时将会响 ...

  4. jwt鉴权学习 (php示例代码)

    前段时间听朋友讲起 jwt鉴权,博主我是一脸懵逼,通过朋友坚持不懈的讲解,我终于听懂了,jwt就是登陆token校验嘛 然而事情并不是博主想象的那么简单,在一个艳阳高照,晴空万里的夜晚,博主手贱百度了 ...

  5. 面试阿里,首先要掌握的 Java 泛型,帮你一次性搞懂!

    引言 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用.本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除. 泛型基础 泛型类 我们首 ...

  6. Camtasia绿幕素材的视频合成

    随着科技和互联网的快速发展,让越来越多的人喜欢上了视频的各项制作,那么怎么让两个视频进行合成并一起播放呢?操作很简单,下面来讲解具体的操作步骤.小编选用的是Camtasia2019版本的视频编辑软件进 ...

  7. 快来,Boom 3D广播功能还能这样用

    Boom 3D不仅为用户提供了包括3D立体音效.古典音乐音效在内的多种音效增强功能,而且还为用户提供了广播功能.该广播功能不仅涵盖了国内广播节目,而且还涵盖了国际广播节目. Boom 3D的广播功能还 ...

  8. ppt-页面大小和颜色更改

    1.ppt大小设置:设计--幻灯片大小--可选择标准.宽屏或自定义幻灯片大小--下拉 幻灯片大小可选择其他尺寸的幻灯片 2.设置图片背景 设计--设置背景格式--依次有纯色.渐变.图案等填充 2.1 ...

  9. php数组学习记录01

    array_change_key_case array_change_key_case - 将数组中的所有键名修改为全大写或小写 <?php $input_array = array(" ...

  10. linux(centos7.x)安装jdk

    一.下载与安装 下载地址:链接:https://pan.baidu.com/s/1g7MF1xqlOxWnLGf2shl3NA   提取码:epae  下载完成后将安装包上传到linxu环境中,并将其 ...