【网络流】网络流的基本概念

流网络: G = ( V , E ) G=(V,E) G=(V,E)

有向图,可有考虑反向边。

②对于每条边,都有 c ( u , v ) c(u,v) c(u,v),称为边的容量

③有两个特殊的点,源点 s s s、汇点 t t t

可行流: f f f

考虑反向边。

②需要满足的条件:

容量限制 0 ≤ f ( u , v ) ≤ c ( u , v ) 0\leq f(u,v) \leq c(u,v) 0f(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) xv{ 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)

④最大流为最大可行流,即流量值最大的可行流。

残留网络: G f = ( V f , E f ) Gf=(Vf,Ef) Gf=(Vf,Ef)

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) 0f(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) 0f(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) 0f(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) 0f(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 f0,那么对应的 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 ST=V,ST=,并且 s ∈ S , t ∈ T s \in S,t \in T sS,tT,将子集划分的一个结果称为原图的一个割(点集不一定联通)。

割的容量:(不考虑反向边) 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)=uSvTc(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)=uSvTf(u,v)uTvSf(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)=uSvTf(u,v)uTvSf(u,v)uSvTf(u,v)uSvTc(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)=uX,vYf(u,v)uX,vYf(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,XY)=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(XY,Z)=f(X,Z)+f(Y,Z),需要满足 X ∩ Y = ∅ X\cap Y=\empty XY=

∵ S ∪ T = V , S ∩ T = ∅ ∵S\cup T=V,S\cap T=\empty ST=V,ST=

∴ 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)=usvVf(u,v)usvVf(v,u)=us(vVf(u,v)vVf(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,fc(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

  • 证明① ⇒ \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 ②。

  • 证明③ ⇒ \Rightarrow ①:

前面我们证得: ∣ f ∣ ≤ c ( S , T ) |f|\leq c(S,T) fc(S,T),因此最大流 ≤ c ( S , T ) \leq c(S,T) c(S,T),且最大流 ≤ \leq 最小割。

证明 A = B A=B A=B的常用方式是证明 A ≤ B A\leq B AB并且 B ≤ A B\leq A BA

现在证明 ∣ 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 最大流

∴ ∴ 最大流 = = =最小割

  • 证明② ⇒ \Rightarrow ③:

即需证明在 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=VS

∵ G f ∵Gf Gf中不存在增广路径

∴ ∴ s s s是不可能沿着容量大于 0 0 0的边走到 t t t

∴ t ∉ S ∴t\not\in S tS

∴ ∴ 一定满足 s ∈ S , t ∈ T , S ∩ T = ∅ s\in S,t\in T,S\cap T=\empty sS,tT,ST=

∴ [ 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 xS,yT,都有 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)f(x,y)<c(x,y),在 G f Gf Gf中, c ′ ( x , y ) = c ( x , y ) − f ( x , y ) > 0 c'(x,y)=c(x,y)-f(x,y)>0 c(x,y)=c(x,y)f(x,y)>0 y y y是可以由 x x x遍历到的,与 G f Gf Gf中不存在增广路径矛盾。因此 f ( x , y ) = c ( x , y ) f(x,y)=c(x,y) f(x,y)=c(x,y)

②对于 ∀ a ∈ T , ∀ b ∈ S \forall a\in T,\forall b\in S aT,bS,都有 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)=uSvTf(u,v)uSvTf(v,u)=uSvTc(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必然是对应的,而不是任意的。

你可能感兴趣的:(算法进阶课,图论)