1.流网络
流网络是一个有向图 G<V,E>,其中有两个特殊点 s,t∈V ,分别为源点和汇点。G 中每一条边有一个≥0 的权值,称作边的容量,边 (u,v) 容量可记做 c(u,v)。
源点相当于一个水源,汇点相当于一个大海,中间的边和点相当于河流水道,水从水源流出,流经河道,流向大海。容量描述的就是这些河流水道的宽度/深度/etc.。
为了简化问题,我们假设若存在边 (u,v)∈E,则不存在 (v,u)∈E 。
其实我们也有一种办法消除这种边,只需要将 (v,u) 拆成 (v,t) 和 (t,u) 就可以了。
总之,在考虑问题时,不用考虑反向边。
2.可行流
对于每一个流网络,我们可以考虑它的任意一个可行流(可简称流),流用 ff来表示,f(u,v) 表示的是单位时间内从 u 点到 v 点流经边 (u,v) 的流。
通俗的来说,就是河道里面流了多少水。
就是说我们要指定每一条边的流量得到一个方案 f ,若满足两个条件:容量限制 和 流量守恒 ,则称这个 f 是一个可行流。
容量限制:流经边的流量小于等于边的容量,即:
流量守恒:除了源点汇点之外其他点不能存储流量。也就是说,流入的流量之和应该等于流出的流量之和,即:
我们完全不用考虑反向边。
对于一个可行流 f,|f| 代表这个可行流的流量值,表示流从源点流向汇点的速率。我们定义:
3.最大流
最大流,也叫最大可行流,一个流 f 是最大流当且仅当 |f| 最大。
4.残留网络
定义一个有向图 G<V,E,W>对应一个可行流 f 的残留网络 Gf<Vf,Ef,Wf> ,其 Vf=V , Ef=E+{(u,v)|(v,u)∈E},其每条边的容量 c′(u,v) 与原图及对应可行流 f 的关系如下:
可以看出,对于原网络的任意一个可行流都可以建立一个残留网络。
上图示:(红色为可行流,蓝色为容量)
这个网络的残留网络应为:(红色为反向边及其权值,蓝色为原图有的边及其权值)
残留网络的性质
1.若 f 为图 G 的一个可行流,f′ 是其残留网络的一个可行流,则 f+f′也是图 G 的一个可行流。
定义这里的流量相加的规则为:
2. 推论:若对于图 G 的一个可行流 f ,其残留网络 Gf 中存在一个可行流 f′ ,其 |f′|>0 则 f 一定不是最大流。逆命题仍然成立。
5.增广路径
在残留网络里面,从源点开始沿容量大于0的边走到汇点的简单路径称为增广路径,也叫流增广路径。
增广路径一定是原网络的一个可行流。
6.增广路定理
设flow是网络G的一个可行流,若不存在从源点到汇点的增广路,则flow是G的一个最大流。
7.割
有向图 G 的割为点集 V 的一个划分方案 <S,T> 使得 S∩T=∅,S∪T=V。
一个割 <S,T> 在可行流 f 下的流量F(S,T) 为
运算方式
割的性质
-
对于任意割 <S,T> ,其流量一定小于等于容量。
定义式相加易得。
-
对于割 <S,T>,其对应的可行流的值 |f|=F(S,T)。
由流量守恒原则易得。
-
对于任意一个 f ,有 |f|≤C(S,T) 对任意割成立。
推论:最大流流量小于等于最小割容量
8.最大流最小割定理
9.FF思想
基于最大流最小割定理,我们可以得到如下方法求解最大流。
- 输入一个网络 G
- 确定一个可行流 f,为当前可行流
- 在其残留网络Gf中寻找增广路径 f′。
- 更新当前可行流为 f+f′
- 转3,若找不到增广路,输出当前可行流。
https://zhuanlan.zhihu.com/p/122375531
对于为什么要引入反向边