网络流重制版:最大流最小割定理的讲解,以及增广路求最大流的证明
@
前言
初一的证明简直就是SB,错漏百出。。。
术语介绍
前向弧:\(E\)中的边。
可行流:上文介绍的是最大流,可行流即为满足\(f,c\)约束的一个流,最大流是没有增广路径的可行流,对于一个流\(f\),\(|f|\)就是其流量。
割
割是啥子东西?
割是针对只有前向弧的有向图的,需要注意的。
一个割就是把点集\(V\)分成\(S,T\)集,我们记为\((S,T)\),其中\(st∈S,ed∈T\)。
而一个割的容量是\(\sum\limits_{u∈S,v∈T,(u,v)∈E}c(u,v)\),流量是\(\sum\limits_{u∈S,v∈T,(u,v)∈E}f(u,v)-\sum\limits_{v∈S,u∈T,(u,v)∈E}f(u,v)\)
定理1: 一个割的流量绝对≤割的容量。
定理2:对于任意一个可行流\(f\),割的流量等于\(|f|\)。
证明:
这个时候,割等于\(S\)到\(T\)的所有出边和\(T\)到\(S\)的所有入边。
推导:
对于一个点\(u∈V-\left \{ st,ed \right \}\),满足下面这条
\(\sum\limits_{u∈V}f(u,v)-\sum\limits_{u∈V}f(v,u)=0\)。
我们把\(|f|\)表示出来:
\(|f|=\sum\limits_{v∈V}f(st,v)+\sum\limits_{u∈S-\left \{ st \right \}}\sum\limits_{v∈V}f(u,v)-\sum\limits_{u∈V}\sum\limits_{v∈S-\left \{ st \right \}}f(u,v)=\sum\limits_{u∈S}\sum\limits_{v∈V}f(u,v)-\sum\limits_{u∈V}\sum\limits_{v∈S}f(u,v)\)
\(V=S∪T,S∩T=0\)
所以
\(|f|=\sum\limits_{u∈S}\sum\limits_{v∈T}f(u,v)+\sum\limits_{u∈S}\sum\limits_{v∈S}f(u,v)-\sum\limits_{u∈T}\sum\limits_{v∈S}f(u,v)-\sum\limits_{u∈S}\sum\limits_{v∈S}f(u,v)=\sum\limits_{u∈S}\sum\limits_{v∈T}f(u,v)-\sum\limits_{u∈T}\sum\limits_{v∈S}f(u,v)\)。
证毕。
定理三:\(|f|=f(S,T)≤c(S,T)\)
因此,最大流≤最小割的容量。
最大流最小割定理证明
终于到这个地方了。。。
设\(f\)为流网络\(G=(V,E)\)中的一个流,那么下面的条件是等价的:
- \(f\)是\(G\)的一个最大流。
- 残余网络\(G_{f}\)不包括任何增广路径。
- \(|f|=c(S,T)\),\(c(S,T)\)是某个切割,很明显这个切割是最小割。
\((1)->(2)\),存在增广路怎么可能是最大流。
\((2)->(3)\),假设\(G_{f}\)中不存在增广路径,那么我们定义\(u\)能走到\(v\),仅当\((u,v)∈E,f(u,v)<c(u,v)\)或者\((v,u)∈E,f(v,u)>0\),很明显,\(st\)到\(ed\)的每条路径都不是增广路,所以路径上一定有\((u,v)∈E,f(u,v)=c(u,v)\)或者\((v,u)∈E,f(v,u)=0\),这个时候定义\(st\)能走到的点集为\(S\),\(ed\)能走到的点集为\(T\)即可。
此时\(u∈T,v∈S,f(u,v)=0\)(不是的话,一定可以到\(v\)),所以\(|f|=\sum\limits_{u∈S}\sum\limits_{v∈V}f(u,v)=\sum\limits_{u∈S}\sum\limits_{v∈V}c(u,v)=c(S,T)\)。
满足条件。
\((3)->(1)\),因为\(|f|≤c(S,T)\),所以当\(|f|=c(S,T)\)时,\(|f|\)最大,所以\(f\)为最大流。
\((2)->(3)->(1)\)证毕。
所以,最小割就是最大流,不存在增广路就是最大流。
参考资料
论如何卡掉Dinic(我没看懂)
咕咕讨论,Zadeh Construction是个什么东西
算法导论爷Orz