①有向图,可有环,不考虑反向边。
②对于每条边,都有 c ( u , v ) c(u,v) c(u,v),称为边的容量。
③有两个特殊的点,源点 s s s、汇点 t t t。
①不考虑反向边。
②需要满足的条件:
容量限制: 0 ≤ f ( u , v ) ≤ c ( u , v ) 0\leq f(u,v) \leq c(u,v) 0≤f(u,v)≤c(u,v)
流量守恒: ∀ x ∈ v { s , t } , ∑ ( v , x ) ∈ E f ( v , x ) = ∑ ( x , v ) ∈ E f ( x , v ) \forall x\in v \{s,t\},\sum_{(v,x) \in E}f(v,x)=\sum_{(x,v) \in E}f(x,v) ∀x∈v{ s,t},∑(v,x)∈Ef(v,x)=∑(x,v)∈Ef(x,v)
③可行流的流量值: ∣ f ∣ = ∑ ( s , v ) ∈ E f ( s , v ) = ∑ ( v , s ) ∈ E f ( v , s ) |f|=\sum_{(s,v)\in E}f(s,v)=\sum_{(v,s)\in E}f(v,s) ∣f∣=∑(s,v)∈Ef(s,v)=∑(v,s)∈Ef(v,s)
④最大流为最大可行流,即流量值最大的可行流。
① V f = V Vf=V Vf=V, E f = E + E Ef=E+E Ef=E+E中所有的反向边(可以有反向边)。
②残留网络中每条边都有容量值 c ′ ( u , v ) c'(u,v) c′(u,v):
c ′ ( u , v ) = { c ( u , v ) − f ( u , v ) , ( u , v ) ∈ E f ( v , u ) , ( v , u ) ∈ E c'(u,v)=\begin{cases} c(u,v)-f(u,v),(u,v)\in E\\ f(v,u),(v,u)\in E\\ \end{cases} c′(u,v)={ c(u,v)−f(u,v),(u,v)∈Ef(v,u),(v,u)∈E
③一组 G , f G,f G,f对应一个 G f Gf Gf。
④ f + f ′ f+f' f+f′也是 G G G的一个可行流, ∣ f + f ′ ∣ = ∣ f ∣ + ∣ f ′ ∣ |f+f'|=|f|+|f'| ∣f+f′∣=∣f∣+∣f′∣。( f ′ f' f′为 G f Gf Gf中的一个可行流)
证明:(1)对于容量限制:
a . a. a. 当 c ′ ( u , v ) = c ( u , v ) − f ( u , v ) , ( u , v ) ∈ E c'(u,v)=c(u,v)-f(u,v),(u,v)\in E c′(u,v)=c(u,v)−f(u,v),(u,v)∈E时,即两条边的方向的相同的:
∵ 0 ≤ f ′ ( u , v ) ≤ c ′ ( u , v ) = c ( u , v ) − f ( u , v ) ∵0 \leq f'(u,v) \leq c'(u,v)=c(u,v)-f(u,v) ∵0≤f′(u,v)≤c′(u,v)=c(u,v)−f(u,v)
∴ 0 ≤ f ( u , v ) + f ′ ( u , v ) ≤ c ( u , v ) ∴0 \leq f(u,v)+f'(u,v) \leq c(u,v) ∴0≤f(u,v)+f′(u,v)≤c(u,v)
成立。
b . b. b. 当 c ′ ( u , v ) = f ( u , v ) , ( v , u ) ∈ E c'(u,v)=f(u,v),(v,u)\in E c′(u,v)=f(u,v),(v,u)∈E时,即两条边的方向的不同的:
∵ 0 ≤ f ′ ( u , v ) ≤ c ′ ( u , v ) = f ( v , u ) ≤ c ( v , u ) ∵0 \leq f'(u,v) \leq c'(u,v)=f(v,u) \leq c(v,u) ∵0≤f′(u,v)≤c′(u,v)=f(v,u)≤c(v,u)
∴ 0 ≤ f ( u , v ) − f ′ ( u , v ) ≤ c ( u , v ) ∴0 \leq f(u,v)-f'(u,v) \leq c(u,v) ∴0≤f(u,v)−f′(u,v)≤c(u,v)
成立。
(2)对于流量守恒:
∣ f + f ′ ∣ |f+f'| ∣f+f′∣为原网络中从源点流出的净流量 ∣ f ∣ |f| ∣f∣+残留网络中从源点流出的净流量 ∣ f ′ ∣ |f'| ∣f′∣
⑤推论:若在 G f Gf Gf中存在 ∣ f ′ ∣ > 0 |f'| >0 ∣f′∣>0,那么对应的 f f f必定不是原网络中的最大流。
在残留网络里,从 s s s开始,沿着容量大于 0 0 0的边走,如果能走到 t t t,那么这条路径就被称为增广路径。
若 f f f为 G G G中的最大流,那么对应的 G f Gf Gf没有增广路径。
①定义:将原网络的点集 V V V分为两个子集 S , T S,T S,T,满足 S ∪ T = V , S ∩ T = ∅ S \cup T=V,S \cap T= \empty S∪T=V,S∩T=∅,并且 s ∈ S , t ∈ T s \in S,t \in T s∈S,t∈T,将子集划分的一个结果称为原图的一个割(点集不一定联通)。
②割的容量:(不考虑反向边) c ( S , T ) = ∑ u ∈ S ∑ v ∈ T c ( u , v ) c(S,T)= \sum_{u \in S} \sum_{v \in T}c(u,v) c(S,T)=∑u∈S∑v∈Tc(u,v)
最小割:容量最小的割。
③割的流量:(考虑反向边) f ( S , T ) = ∑ u ∈ S ∑ v ∈ T f ( u , v ) − ∑ u ∈ T ∑ v ∈ S f ( u , v ) f(S,T)= \sum_{u \in S} \sum_{v \in T}f(u,v)- \sum_{u \in T} \sum_{v \in S}f(u,v) f(S,T)=∑u∈S∑v∈Tf(u,v)−∑u∈T∑v∈Sf(u,v)
性质1: ∀ [ S , T ] , ∀ f , f ( S , T ) ≤ c ( S , T ) \forall [S,T], \forall f,f(S,T) \leq c(S,T) ∀[S,T],∀f,f(S,T)≤c(S,T)
证明: f ( S , T ) = ∑ u ∈ S ∑ v ∈ T f ( u , v ) − ∑ u ∈ T ∑ v ∈ S f ( u , v ) ≤ ∑ u ∈ S ∑ v ∈ T f ( u , v ) ≤ ∑ u ∈ S ∑ v ∈ T c ( u , v ) f(S,T)= \sum_{u \in S} \sum_{v \in T}f(u,v)- \sum_{u \in T} \sum_{v \in S}f(u,v) \leq \sum_{u \in S} \sum_{v \in T}f(u,v) \leq \sum_{u \in S} \sum_{v \in T}c(u,v) f(S,T)=∑u∈S∑v∈Tf(u,v)−∑u∈T∑v∈Sf(u,v)≤∑u∈S∑v∈Tf(u,v)≤∑u∈S∑v∈Tc(u,v)
④性质2: ∀ [ S , T ] , ∀ f , ∣ f ∣ = f ( S , T ) \forall [S,T], \forall f,|f|=f(S,T) ∀[S,T],∀f,∣f∣=f(S,T)
直观证明:
证明: ∣ f ∣ |f| ∣f∣为从 s s s流到 t t t的净流量,其路径一定经过从 S S S到 T T T的路径,即等于 S S S流到 T T T的总净流量 f ( S , T ) f(S,T) f(S,T)。
形式化证明:
证明:定义: f ( X , Y ) = ∑ u ∈ X , v ∈ Y f ( u , v ) − ∑ u ∈ X , v ∈ Y f ( v , u ) f(X,Y)=\sum_{u\in X,v\in Y}f(u,v)-\sum_{u\in X,v\in Y}f(v,u) f(X,Y)=∑u∈X,v∈Yf(u,v)−∑u∈X,v∈Yf(v,u)
先看几个流量的性质:
① f ( X , Y ) = − f ( Y , X ) f(X,Y)=-f(Y,X) f(X,Y)=−f(Y,X)
② f ( X , X ) = 0 f(X,X)=0 f(X,X)=0
③ f ( Z , X ∪ Y ) = f ( Z , X ) + f ( Z , Y ) f(Z,X\cup Y)=f(Z,X)+f(Z,Y) f(Z,X∪Y)=f(Z,X)+f(Z,Y), f ( X ∪ Y , Z ) = f ( X , Z ) + f ( Y , Z ) f(X\cup Y,Z)=f(X,Z)+f(Y,Z) f(X∪Y,Z)=f(X,Z)+f(Y,Z),需要满足 X ∩ Y = ∅ X\cap Y=\empty X∩Y=∅
∵ S ∪ T = V , S ∩ T = ∅ ∵S\cup T=V,S\cap T=\empty ∵S∪T=V,S∩T=∅
∴ f ( S , V ) = f ( S , S ) + f ( S , T ) ∴f(S,V)=f(S,S)+f(S,T) ∴f(S,V)=f(S,S)+f(S,T)
∴ f ( S , T ) = f ( S , V ) − f ( S , S ) = f ( S , V ) ∴f(S,T)=f(S,V)-f(S,S)=f(S,V) ∴f(S,T)=f(S,V)−f(S,S)=f(S,V)
∴ f ( S , T ) = f ( { s } , V ) + f ( S − { s } , V ) ∴f(S,T)=f(\{s\},V)+f(S-\{s\},V) ∴f(S,T)=f({ s},V)+f(S−{ s},V)
设 s ′ = S − { s } s'=S-\{s\} s′=S−{ s}
∵ f ( s ′ , V ) = ∑ u ∈ s ′ ∑ v ∈ V f ( u , v ) − ∑ u ∈ s ′ ∑ v ∈ V f ( v , u ) = ∑ u ∈ s ′ ( ∑ v ∈ V f ( u , v ) − ∑ v ∈ V f ( v , u ) ) = 0 ∵f(s',V)=\sum_{u\in s'} \sum_{v\in V}f(u,v)-\sum_{u\in s'} \sum_{v\in V}f(v,u)=\sum_{u\in s'}(\sum_{v\in V}f(u,v)-\sum_{v\in V}f(v,u))=0 ∵f(s′,V)=∑u∈s′∑v∈Vf(u,v)−∑u∈s′∑v∈Vf(v,u)=∑u∈s′(∑v∈Vf(u,v)−∑v∈Vf(v,u))=0
∴ f ( S , T ) = f ( s , V ) = ∣ f ∣ ∴f(S,T)=f(s,V)=|f| ∴f(S,T)=f(s,V)=∣f∣
结论: ∀ [ S , T ] , ∀ f , ∣ f ∣ ≤ c ( S , T ) \forall[S,T],\forall f,|f|\leq c(S,T) ∀[S,T],∀f,∣f∣≤c(S,T)
最大流 ≤ \leq ≤最小割
对于某一个流网络 G = ( V , E ) G=(V,E) G=(V,E):
① f f f是最大流
② G f Gf Gf中不存在增广路径
③ ∃ [ S , T ] , ∣ f ∣ = c ( S , T ) \exists[S,T],|f|=c(S,T) ∃[S,T],∣f∣=c(S,T)
需要证明① ⇔ \Leftrightarrow ⇔② ⇔ \Leftrightarrow ⇔③,则要证明① ⇒ \Rightarrow ⇒② ⇒ \Rightarrow ⇒③ ⇒ \Rightarrow ⇒①
反证法: f f f为最大流,若在 G f Gf Gf中存在增广路径,即存在 ∣ f ′ ∣ > 0 |f'|>0 ∣f′∣>0,那么 ∣ f + f ′ ∣ = ∣ f ∣ + ∣ f ′ ∣ > ∣ f ∣ |f+f'|=|f|+|f'|>|f| ∣f+f′∣=∣f∣+∣f′∣>∣f∣, f f f不为最大流,与 f f f为最大流矛盾。因此当 f f f是最大流时, G f Gf Gf中不存在增广路径,即① ⇒ \Rightarrow ⇒②。
前面我们证得: ∣ f ∣ ≤ c ( S , T ) |f|\leq c(S,T) ∣f∣≤c(S,T),因此最大流 ≤ c ( S , T ) \leq c(S,T) ≤c(S,T),且最大流 ≤ \leq ≤最小割。
证明 A = B A=B A=B的常用方式是证明 A ≤ B A\leq B A≤B并且 B ≤ A B\leq A B≤A
现在证明 ∣ f ∣ = |f|= ∣f∣=最大流:
∵ ∵ ∵最大流是所有可行流流量的最大值, f f f为一个可行流
∴ ∴ ∴最大流 ≥ ∣ f ∣ \geq |f| ≥∣f∣
∵ ∣ f ∣ = c ( S , T ) ≥ ∵|f|=c(S,T)\geq ∵∣f∣=c(S,T)≥最大流
∴ ∣ f ∣ = ∴|f|= ∴∣f∣=最大流
还可以证明最大流 = = =最小割
前面得到最大流 ≤ \leq ≤最小割
∵ ∵ ∵最小割 ≤ c ( S , T ) = ∣ f ∣ ≤ \leq c(S,T)=|f|\leq ≤c(S,T)=∣f∣≤最大流
∴ ∴ ∴最小割 ≤ \leq ≤最大流
∴ ∴ ∴最大流 = = =最小割
即需证明在 G f Gf Gf中不存在增广路径的情况下,能构造出一个割使得 ∣ f ∣ = c ( S , T ) |f|=c(S,T) ∣f∣=c(S,T)。
定义 S S S:在 G f Gf Gf中,从 s s s出发,沿着容量大于 0 0 0的边走,所有能走到的点。
定义 T T T: T = V − S T=V-S T=V−S
∵ G f ∵Gf ∵Gf中不存在增广路径
∴ ∴ ∴从 s s s是不可能沿着容量大于 0 0 0的边走到 t t t
∴ t ∉ S ∴t\not\in S ∴t∈S
∴ ∴ ∴一定满足 s ∈ S , t ∈ T , S ∩ T = ∅ s\in S,t\in T,S\cap T=\empty s∈S,t∈T,S∩T=∅
∴ [ S , T ] ∴[S,T] ∴[S,T]一个合法的割。
下面证明 c ( S , T ) = ∣ f ∣ c(S,T)=|f| c(S,T)=∣f∣:
①对于 ∀ x ∈ S , ∀ y ∈ T \forall x\in S,\forall y\in T ∀x∈S,∀y∈T,都有 f ( x , y ) = c ( x , y ) f(x,y)=c(x,y) f(x,y)=c(x,y)。
如果 f ( x , y ) < c ( x , y ) f(x,y)
②对于 ∀ a ∈ T , ∀ b ∈ S \forall a\in T,\forall b\in S ∀a∈T,∀b∈S,都有 f ( a , b ) = 0 f(a,b)=0 f(a,b)=0。
如果 f ( a , b ) > 0 f(a,b)>0 f(a,b)>0,则在 G f Gf Gf中, c ′ ( b , a ) = f ( a , b ) > 0 c'(b,a)=f(a,b)>0 c′(b,a)=f(a,b)>0, a a a是可以由 b b b遍历到的,与 G f Gf Gf中不存在增广路径矛盾。因此 f ( a , b ) = 0 f(a,b)=0 f(a,b)=0。
由①②, ∣ f ∣ = f ( S , T ) = ∑ u ∈ S ∑ v ∈ T f ( u , v ) − ∑ u ∈ S ∑ v ∈ T f ( v , u ) = ∑ u ∈ S ∑ v ∈ T c ( u , v ) = c ( S , T ) |f|=f(S,T)=\sum_{u\in S}\sum_{v\in T}f(u,v)-\sum_{u\in S}\sum_{v\in T}f(v,u)=\sum_{u\in S}\sum_{v\in T}c(u,v)=c(S,T) ∣f∣=f(S,T)=∑u∈S∑v∈Tf(u,v)−∑u∈S∑v∈Tf(v,u)=∑u∈S∑v∈Tc(u,v)=c(S,T)
因此 ∣ f ∣ = c ( S , T ) |f|=c(S,T) ∣f∣=c(S,T)。
注意:在所有证明中, G , f , G f G,f,Gf G,f,Gf必然是对应的,而不是任意的。