网络流重制版:最大流最小割定理的讲解,以及增广路求最大流的证明

@

前言

初一的证明简直就是SB,错漏百出。。。

术语介绍

前向弧:(E)中的边。
可行流:上文介绍的是最大流,可行流即为满足(f,c)约束的一个流,最大流是没有增广路径的可行流,对于一个流(f)(|f|)就是其流量。

割是啥子东西?

割是针对只有前向弧的有向图的,需要注意的。

一个割就是把点集(V)分成(S,T)集,我们记为((S,T)),其中(st∈S,ed∈T)

而一个割的容量是(sumlimits_{u∈S,v∈T,(u,v)∈E}c(u,v)),流量是(sumlimits_{u∈S,v∈T,(u,v)∈E}f(u,v)-sumlimits_{v∈S,u∈T,(u,v)∈E}f(u,v))
定理1: 一个割的流量绝对≤割的容量。
定理2:对于任意一个可行流(f),割的流量等于(|f|)
证明:
这个时候,割等于(S)(T)的所有出边和(T)(S)的所有入边。
推导:
对于一个点(u∈V-left { st,ed ight }),满足下面这条
(sumlimits_{u∈V}f(u,v)-sumlimits_{u∈V}f(v,u)=0)
我们把(|f|)表示出来:
(|f|=sumlimits_{v∈V}f(st,v)+sumlimits_{u∈S-left { st ight }}sumlimits_{v∈V}f(u,v)-sumlimits_{u∈V}sumlimits_{v∈S-left { st ight }}f(u,v)=sumlimits_{u∈S}sumlimits_{v∈V}f(u,v)-sumlimits_{u∈V}sumlimits_{v∈S}f(u,v))

(V=S∪T,S∩T=0)

所以

(|f|=sumlimits_{u∈S}sumlimits_{v∈T}f(u,v)+sumlimits_{u∈S}sumlimits_{v∈S}f(u,v)-sumlimits_{u∈T}sumlimits_{v∈S}f(u,v)-sumlimits_{u∈S}sumlimits_{v∈S}f(u,v)=sumlimits_{u∈S}sumlimits_{v∈T}f(u,v)-sumlimits_{u∈T}sumlimits_{v∈S}f(u,v))

证毕。

定理三:(|f|=f(S,T)≤c(S,T))

因此,最大流≤最小割的容量。

最大流最小割定理证明

终于到这个地方了。。。

(f)为流网络(G=(V,E))中的一个流,那么下面的条件是等价的:

  1. (f)(G)的一个最大流。
  2. 残余网络(G_{f})不包括任何增广路径。
  3. (|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|=sumlimits_{u∈S}sumlimits_{v∈V}f(u,v)=sumlimits_{u∈S}sumlimits_{v∈V}c(u,v)=c(S,T))

满足条件。

((3)->(1)),因为(|f|≤c(S,T)),所以当(|f|=c(S,T))时,(|f|)最大,所以(f)为最大流。

((2)->(3)->(1))证毕。

所以,最小割就是最大流,不存在增广路就是最大流。

参考资料

EK时间复杂度的分析

一篇写得不错得最大流博客,术语很齐全

论如何卡掉Dinic(我没看懂)
咕咕讨论,Zadeh Construction是个什么东西

二分图匹配Dinic重拳出击

各种算法的时间复杂度以及HLPP的讲解

Dinic之神

最大流的正确性

各种算法的时间复杂度

算法导论爷Orz

原文地址:https://www.cnblogs.com/zhangjianjunab/p/14026558.html