最小割树Gomory-Hu tree

来源:互联网 发布:淘宝手绘照片是真的吗 编辑:程序博客网 时间:2024/05/17 18:11

前言:最小割树(又称Gomory-Hu tree)在信息学竞赛中有着广泛的应用,但网上的资料往往只模糊的带过证明过程。以下即是描述对该模型的一个证明,内容主要由笔者翻译自Combinatorial Optimization: Polyhedra and Efficiency[2002] Chapter 15.4(亚马逊上有卖,价格感人)
https://www.amazon.cn/dp/3540443894/ref=sr_1_7?ie=UTF8&qid=1484798027&sr=8-7&keywords=Combinatorial+Optimization
首先给出Gomory-Hu tree的定义:
对于一个无向图G = (V,E)和容量方程c : E → R+.一个Gomory-Hu tree(对G和c)是树T = (V,F)对每个T上的边e = st,δ(U)是一个G的最小割,其中U是T中的任意两个部分(注意并不要求T是G的子图。)
Gomory and Hu发现对每个G,c一定存在Gomory-Hu tree能够被n-1次最小割计算找到。
对不同的s,t∈V ,定义r(s,t)为s-t的最小割。由三角不等式得到:(1.1) r(u,w)≥min{r(u, v), r(v,w)}对不同的u, v, w∈G。
现在一个Gomory-Hu tree对所有s, t能够简明描述s-t的最小割:

定理1:使T = (V,F)为一个Gomory-Hu tree。考虑对于任意s, t∈V,s-t的在T上的路径为P,一个边e = uv在P上使得r(u, v)最小,和T-e的任意部分K。那么r(s, t) = r(u, v)且δ(K)是一个s-t的最小割
证明:显然,由(1.1)有r(s, t) ≥ r(u, v)。此外,δ(K)是s-t的一个割,因此有r(s, t) ≤ c(δ(K)) = r(u, v)。
来证明一个Gomory-Hu tree存在,我们首先证明:
引理1:对s, t∈V,使δ(U)是G中s-t的最小割,且使得u, v∈U(u≠v)。那么存在一个u-v的最小割δ(W)且W ⊆ U。
证明:考虑一个u-v的最小割δ(X)。由对称性我们假设s∈U(否则交换s和t),t∉U, s∈X(否则用V\X取代X),u∈X(否则交换u和v),且v∉X。那么必然适用于下面二图之一。

无
特别的,δ(U∩X)和δ(U \X)都是u-v的割。
如果t∉X,那么δ(U∪X)是一个s-t的割。因为
(1.2)c(δ(U∩X)) + c(δ(U∪X)) ≤ c(δ(U)) + c(δ(X))

(1.3)c(δ(U∪X)) ≥ c(δ(U)),
我们有c(δ(U∩X)) ≤c(δ(X))。所以δ(U∩X)是一个u-v的最小割。
如果t∈X,那么δ(U \X)是一个s-t的割。因为
(1.4)c(δ(U\X)) + c(δ(X\U)) ≤ c(δ(U)) + c(δ(X))

(1.5)c(δ(X\U)) ≥ c(δ(U)),
我们有c(δ(U \ X)) ≤ c(δ(X))。所以δ(U \ X)是一个u-v的最小割。
用这条引理证明Gomory-Hu tree存在:
定理2:对每个图G= (V,E)和每个容量方程c : E → R+存在一个Gomory-Hu tree。
证明:定义一个Gomory-Hu tree为一个集合R ⊆ V为一对树(R,T)和一个V的分割(Cr|r∈R)形如:
(1.6)
(i) 对每个r∈R, 有r∈Cr,
(ii) 对每个边e = st∈T,δ(U)是一个s-t的最小割。此时无 且K为T-e的一部分。
我们借助推断|R|对每个非空的R ⊆ V存在一个R的Gomory-Hu tree来证明。那么对于R=V我们就能得到一个Gomory-Hu tree。
若|R|=1,(1.6)无意义,所以假设|R|≥2。使得δ(W)是分割至少一对R中的节点的最小割。联系V\W为一个顶点v’,由图G‘。使R’:=R∩W。归纳可得,G′有一个Gomory-Hu tree(R′,T′),对R‘有(C′r | r∈R′)。
相似的,联系W到一个顶点v′′, 由图G′′。使R′′:=R\W。归纳可得,G′′有一个Gomory-Hu tree(R′′,T′′),
对R′′有(C′′r | r∈R′′)。
现在使r′′∈R′′,那么有v′∈C′r′。相似地,使r′′∈R′′有v′′∈C′′r′′。使T := T′∪T′′∪{r′r′′},使Cr′ := C′r′{v′}
且使对所有其他r∈ R′有Cr := C′r。相似地,使Cr′′ := C′′r′′{v′′}且使对所有其他r∈ R′′有Cr := C′′r。
现在(R,T)和Cr形成了一个R的Gomory-Hu tree。实际上,对任意e∈T且e≠ r′r′′, (1.6)由引理1得到。若e=r′r′′,
那么U=W且δ(W)是r′-r′′的一个最小割(且它是所有分割至少一对R中的节点的割中的最小割)
这个方法可以强化得到下列算法结果:
定理3:一个Gomory-Hu tree可以由n-1次最小割得到。
证明:在定理2的证明中,足够说明δ(W)为一个至少一对s,t∈ R的最小割。那么δ(W)同样也是一个r′-r′′的最小割。假设存在一个r′-r′′的割δ(X)得到更小的流量。我们可以假设S∈W ,t∉ W。因为δ(W)是一个s-t的最小割,δ(X)不是s-t的割,所以应分开s和r′或t和r′′。由对称性,我们可以假定分开s和r′。那么对于T′中s-r′路径上的若干边uv它也是一个u-v的割。让uv决定割δ(U)。这个割是一个s-t的割,且因此c(δ(U)) ≥ c(δ(W))。另一方面,c(δ(U))≤c(δ(X)),因为c(δ(U))是u-v的一个最小割。这与我们c(δ(X))≤c(δ(W))的假设相矛盾。
时间复杂度O(N^4)
时间复杂度的证明略。
以下是简单的核心代码(C++):

1.  for(int i=1;i<=n;i++)fa[i]=1;2.  for(int i=1;i<=n;i++)3.  for(int j=1;j<=n;j++)4.  f[i][j]=1<<30;5.  //预处理6.  for(int i=2,temp;i<=n;i++)7.  {BuildGraph();8.  S=i;T=fa[i];9.  temp=Maxflow();10. for(int j=1;j<i;j++)f[i][j]=f[j][i]=min(f[j][fa[i]],temp);11. Dfs(i);12. for(int j=i+1;j<=n;j++)if(vst[j]&&fa[i]==fa[j])fa[j]=i;13. }

相关题目: cqoi2016 不同的最小割
zjoi2011最小割

0 0
原创粉丝点击