Flow Network
网络流图 G=(V,E,c) 是一张有向图,其中每一条有向边 e=(u,v) 有容量 (capacity) c(u,v)≥0. 除此之外,G 中还有两个特殊节点 source s 和 sink t.
Flow
在此基础上,我们定义流 (Flow). G 上的流 f 给每一条边 e=(u,v) 都赋上一个实数 f(u,v) 且满足:
- 每一条边的流量都不会超过其容量 capacity.f(u,v)≤c(u,v)
- 除了源点与汇点,其余每一点都满足:流入的流量和流出的流量相等。∀v∈V−{s,t},(x,v)∈E∑f(x,v)=(v,y)∈E∑f(v,y)
最大流求解算法
Ford-Fulkerson 算法
Cut
什么是割?
图的一个“割” (Cut) 是指将图分成两个点集 A,B 且源点 s∈A,汇点 t∈B. 定义 Capacity of Cut cap(A,B)=∑e out of Ac(e)
Flow Value Lemma
令 f 为 G 上任意的流,(A,B) 为 G 上任意的割(s∈A,t∈B),则必有
value(f)=e out of A∑f(e)−e into A∑f(e)
证明
考虑 A 中的每一个节点,除了源点 s 以外,其余所有点都满足 outflow(v)=inflow(v),而 s 的 inflow(s)=0,所以
value(f)=∑outflow(s)=v∈A∑outflow(v)−inflow(v)我们再来考察 ∑v∈Aoutflow(v),检查所有边,可得
v∈A∑outflow(v)=e inside A∑f(e)+e out of A∑f(e)同理对 inflow 有
v∈A∑inflow(v)=e inside A∑f(e)+e into A∑f(e)两式相减可得
value(f)=e out of A∑f(e)−e into A∑f(e)
由此也可以推得几个推论
Corollary 1
value(f)≤cap(A,B)
证明
value(f)=e out of A∑f(e)−e into A∑f(e)≤e out of A∑f(e)≤e out of A∑cap(e)=cap(A,B)
Theorem 3
令 f 为图上的流且使得 Gf 不存在增广路,那么存在一种 cut (A,B) 使得 value(f)=cap(A,B).
证明
既然 Gf 上已经不存在增广路,那么 Gf 天然的可以被划分为两个集合 A,B,其中 A={v:s→v},B=V−A
这也就是说,原图 G 中,A 到 B 的有向边的 residual capacity 均为 0,根据 Flow Value Lemma,cut(A,B) 就是一种符合条件的割。
最大流最小割定理
Max Flow=Min Cut