Flow Network

网络流图 G=(V,E,c)G=(V,E,c) 是一张有向图,其中每一条有向边 e=(u,v)e=(u,v)容量 (capacity) c(u,v)0c(u,v)\ge 0. 除此之外,GG 中还有两个特殊节点 source ss 和 sink tt.

Flow

在此基础上,我们定义流 (Flow). GG 上的流 ff 给每一条边 e=(u,v)e=(u,v) 都赋上一个实数 f(u,v)f(u,v) 且满足:

  1. 每一条边的流量都不会超过其容量 capacity.
    f(u,v)c(u,v)f(u,v)\le c(u,v)
  2. 除了源点与汇点,其余每一点都满足:流入的流量和流出的流量相等
    vV{s,t},(x,v)Ef(x,v)=(v,y)Ef(v,y)\forall v\in V-\{s,t\}, \sum_{(x,v)\in E} f(x,v)=\sum_{(v,y)\in E} f(v,y)

最大流求解算法

Ford-Fulkerson 算法


Cut

什么是割?

图的一个“割” (Cut) 是指将图分成两个点集 A,BA,B 且源点 sAs\in A,汇点 tBt\in B. 定义 Capacity of Cut cap(A,B)=e out of Ac(e)cap(A,B)=\sum_{e\text{ out of }A}c(e)

Flow Value Lemma

ffGG 上任意的流,(A,B)(A,B)GG 上任意的割(sA,tBs\in A,t\in B),则必有

value(f)=e out of Af(e)e into Af(e) \text{value}(f)=\sum_{e \text{ out of }A}f(e)-\sum_{e\text{ into }A} f(e)
证明

考虑 AA 中的每一个节点,除了源点 ss 以外,其余所有点都满足 outflow(v)=inflow(v)\text{outflow}(v)=\text{inflow}(v),而 ssinflow(s)=0\text{inflow}(s)=0,所以

value(f)=outflow(s)=vAoutflow(v)inflow(v) \mathrm{value}(f)=\sum \mathrm{outflow}(s)=\sum_{v\in A} \mathrm{outflow}(v)-\mathrm{inflow}(v)

我们再来考察 vAoutflow(v)\sum_{v\in A}\mathrm{outflow}(v),检查所有边,可得

vAoutflow(v)=e inside Af(e)+e out of Af(e) \sum_{v\in A}\mathrm{outflow}(v)=\sum_{e\text{ inside }A}f(e)+\sum_{e\text{ out of }A}f(e)

同理对 inflow 有

vAinflow(v)=e inside Af(e)+e into Af(e) \sum_{v\in A}\mathrm{inflow}(v)=\sum_{e\text{ inside }A}f(e)+\sum_{e\text{ into }A}f(e)

两式相减可得

value(f)=e out of Af(e)e into Af(e) \mathrm{value}(f)=\sum_{e\text{ out of }A}f(e)-\sum_{e\text{ into }A}f(e)

由此也可以推得几个推论

Corollary 1
value(f)cap(A,B) \mathrm{value}(f)\le \mathrm{cap}(A,B)
证明
value(f)=e out of Af(e)e into Af(e)e out of Af(e)e out of Acap(e)=cap(A,B) \begin{aligned} \mathrm{value}(f)&=\sum_{e\text{ out of }A} f(e)-\sum_{e\text{ into }A} f(e)\\ &\le \sum_{e\text{ out of }A} f(e)\\ &\le\sum_{e\text{ out of }A} \mathrm{cap}(e)\\ &=\mathrm{cap}(A,B) \end{aligned}

Theorem 3

ff 为图上的流且使得 GfG_f 不存在增广路,那么存在一种 cut (A,B)(A,B) 使得 value(f)=cap(A,B)\mathrm{value}(f)=cap(A,B).

证明

既然 GfG_f 上已经不存在增广路,那么 GfG_f 天然的可以被划分为两个集合 A,BA,B,其中 A={v:sv},B=VAA=\set{v:s\to v},B=V-A

这也就是说,原图 GG 中,AABB 的有向边的 residual capacity 均为 00,根据 Flow Value Lemma,cut(A,B)\mathrm{cut}(A,B) 就是一种符合条件的割。

最大流最小割定理

Max Flow=Min Cut \text{Max Flow}=\text{Min Cut}