首页 > 其他分享 >[学习笔记]最小割树 (Gomory-Hu Tree)

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

时间:2024-08-01 16:42:02浏览次数:23  
标签:... geq cut 割树 min Tree 最小 Hu

本文是在作者阅读多篇博客后糅合而成的,部分内容有雷同。

最小割树又称 Gomory-Hu 树,由 Ralph Edward Gomory 和 Te Chiang Hu 于 1961 年发表的论文中共同提出。最小割树可以在 \(n − 1\) 次最大流中构建,并通过树上 RMQ 求任意两点之间的最小割。

板子题:

P4897 【模板】最小割树(Gomory-Hu Tree)

1.构造

定义 \(cut(u,v)\) 为无向图中 \(u,v\) 之间的最小割大小。

最小割树最开始初始化为 \(n\) 个不相连的点。先任意选取两个节点 \(u,v\)​, 求出它们的最小割 \(cut(u,v)\)​, 跑最大流时,满流的边就对应最小割中割掉的边。通过这组割, 可以把图划分成两个部分, \(u\) 所在的点集记作 \(U\), \(v\) 所在的点集记作 \(V\)。在最小割树上连接 \(u,v\), 边权为 \(cut(u, v)\)。点集 \(U,V\) 分别构成 \(u,v\) 树上的子树,递归处理 \(U,V\),最终得到的树形结构就是就是最小割树。

2.性质

最小割树满足一个很强的性质:两点之间的最小割 等于 在最小割树上两点间路径中边的最小权。

下面是简单证明。

  • 定理1 任选 \(u,v\) 跑一次最小割,将图分成了 \(S,T\) 两个集合。
    则 \((x\in S,y\in T)\Longrightarrow cut(x,y)\leq cut(u,v)\)
    证明 : 割断 \(u,v\) 的割显然也分隔了 \(S,T\) , 所以 \(cut(u,v)\) 是上界。

  • 定理2 任取三点 \(a,b,c\) 则 \(cut(a,b),cut(a,c),cut(b,c)\) 中最小值至少出现两次。
    证明 : 不妨假设 \(cut(a,b)\) 是最小的,先割开,再讨论 \(c\) 在 \(S,T\) 的那个集合内。
    不妨设其在 \(S\) 内,由 {定理1} 得到 \(cut(b,c)\leq cut(a,b)\) 。
    而由 \(cut(a,b)\) 最小的假设则得到 \(cut(b,c)=cut(a,b)\) ,出现两次。

  • 推论1 : \(cut(a,b)\geq \min\{cut(a,c),cut(b,c)\}\)
    证明 : 若 \(cut(a,b)\) 不是最小值,显然成立,若 \(cut(a,b)\) 是最小值,则一定会出现两次,也会出现在 \(\min\) 中。

  • 推论2 对于两点 \((u,v)\) ,有 \(cut(u,v)\geq\min\{cut(u,w_1),cut(w_1,w_2)...,cut(w_m,v)\}\)
    证明 : 首先由由 {定理2} 得到 \(cut(u,v)\geq\min\{cut(u,w_1),cut(w_1,v)\}\)。
    对 \(cut(w_1,v)\),我们重复上述操作得到 \(cut(w_1,v)\geq\min\{cut(w_1,w_2),cut(w_2,v)\}\),结合两个集合的 min, 得到:

\[cut(u,v)\geq\min\{(cut(u,w_1),cut(w_1,v)\}\Longrightarrow cut(u,v)\geq\min\{cut(u,w1),cut(w_1,w_2),cut(w_2,v)\} \]

重复任意次即可得到 {推论2}。

  • 定理3(最小割树定理) 如上所述。设 \(u,v\) 为欲求的两个点, \(u,v\) 在最小割树的路径构成一个边集 \((w_1,w_2),(w_2,y_3)...(w_{m-1},w_m)\), 其中 \(w_1=u,w_m=v\)。
    证明 : 首先, 不难得到 \(u,v\) 在 \(x_i,y_i\) 最小割的两侧。由 {定理1} , \(cut(u,v)\leq cut(w_i,w_{i+1})\)。
    然后根据 {定理2.2} 又能得到 \(cut(u,v)\geq\min\{cut(w_1,w_2),cut(w_2,w_3)...,cut(w_{m-1},w_m)\}\) 。
    也就是\(\min\{cut(w_1,w_2),cut(w_2,w_3)...,cut(w_{m-1},w_m)\}\leq cut(u,v)\leq\min\{cut(w_1,w_2),cut(w_2,w_3)...,cut(w_{m-1},w_m)\}\)

这就得到了 \(cut(u,v)=\min\{cut(w_1,w_2),cut(w_2,w_3)...,cut(w_{m-1},w_m)\}\) 。

标签:...,geq,cut,割树,min,Tree,最小,Hu
From: https://www.cnblogs.com/xm-blog/p/18336955

相关文章

  • Hugging Face Access Tokens 四种用法
    访问HuggingFace中的资源,需要使用AccessTokens,可以在HuggingFace设置页面(https://huggingface.co/settings/tokens)生成自己的token。一旦你获得了token,可以有下面几种方法使用它:一、直接在代码中传递token类似如下代码,在代码中直接传递HuggingFace的API令牌。fro......
  • ctfhub-sql注入-injection-解题思路
    1.打开题目,判断是数字型注入还是字符型注入    1.输入1’  //无回显        1‘ --+//也是没有回显        1”  //无回显        1“--= //无回显都没有回显,所以判断为数字型注入2.使用命令进行判断......
  • Watt Toolkit非常好用的加速器 gitHub加速器
    WattToolkit非常好用的加速器「WattToolkit」是一个开源跨平台的多功能工具箱。本文章只对网络加速进行讲解,其他功能请自行摸索简单好用,易上手,可对gitHub、Twitch、公共CDN、Discord、Uplay、国外验证码平台等进行加速  官方网址:WattToolkitGitHub、谷歌验证码等国内......
  • GitHub Actions 工作流程中的 moviepy 安装错误:subprocess-exited-with-error
    我尝试在GitHubActions工作流程中安装moviepy时遇到错误。在我的本地机器上安装工作正常,但在CI环境中有时会失败。该错误消息表明获取构建轮子的要求未成功运行,退出代码为1。它还提到该错误源自子进程,并且可能不是pip的问题。Downloadingmoviepy-1.0.3.tar.gz(388......
  • 在 Hub 上使用 Presidio 进行自动 PII 检测实验
    我们在HuggingFaceHub上托管的机器学习(ML)数据集中发现了一个引人关注的现象:包含个人未经记录的私密信息。这一现象为机器学习从业者带来了一些特殊挑战。在本篇博客中,我们将深入探讨含有一种称为个人识别信息(PII)的私密信息的各类数据集,分析这些数据集存在的问题,并......
  • IT运维必备神器!PsShutdown,定时关机重启一键搞定!
    嘿,各位技术小能手们,小江湖今天要给大家安利一个宝贝——PsShutdown!这可不是一般的关机小工具哦;当你坐在电脑前,手指轻轻敲几下键盘,就能实现定时任务,无论是关机、重启,还是注销用户,甚至是锁屏,都尽在掌握之中;是不是已经心痒痒,迫不及待想要一探究竟了?别急,咱们先不聊那些冷冰冰的功能......
  • Java图片处理Thumbnailator
    原文链接:https://zhuanlan.zhihu.com/p/604121848 Thumbnailator是Google开源的优秀图片处理的第三方Java类库,比JDK自带的库要好用的多。官网Github地址Maven依赖目前最新版本是0.4.19<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</a......
  • 核心(Hutool-core)LocalDateTime工具-LocalDateTimeUtil
    介绍从Hutool的5.4.x开始,Hutool加入了针对JDK8+日期API的封装,此工具类的功能包括LocalDateTime和LocalDate的解析、格式化、转换等操作使用日期转换StringdateStr="2020-01-23T12:23:56";DateTimedt=DateUtil.parse(dateStr);//Date对象转换为LocalDateTimeLocalDat......
  • 核心(Hutool-core)计时器工具-TimeInterval
    介绍Hutool通过封装TimeInterval实现计时器功能,即可以计算方法或过程执行的时间。TimeInterval支持分组计时,方便对比时间。使用TimeIntervaltimer=DateUtil.timer();//---------------------------------//-------这是执行过程//---------------------------------time......
  • 核心(Hutool-core)日期时间对象-DateTime
    由来考虑工具类的局限性,在某些情况下使用并不简便,于是DateTime类诞生。DateTime对象充分吸取Joda-Time库的优点,并提供更多的便捷方法,这样我们在开发时不必再单独导入Joda-Time库便可以享受简单快速的日期时间处理过程。DateTime类继承于java.util.Date类,为Date类扩展了众多简便......