一.最大流最小割定理.
割:对于一张网络,我们称一个边集的子集为一个割,当且仅当去掉这个边集的子集后源点 S S S无法到达汇点 T T T.
最小割:边权和最小的割被称为最小割.
最大流-最小割定理:一张网络的最大流等于其最小割的边权之和.
这个东西太经典了这里就不证了.
二.输出一种最小割的方案.
先跑一遍最大流得到残余网络.容易发现 S S S 和 T T T 之间不连通了.
在残余网络上进行一次遍历,求出从 S S S 出发能到达的点集,和不能到达的点集.
所有
S
S
S 能到达的点到
S
S
S 不能到达的点的满流边就是一组最小割.
三.最小割的可行边与必经边.
显然一张网络可能有不止一个最小割,那么我们如何确定一条边是最小割的可行边或者必经边?
首先考虑对网络跑一遍最大流,此时我们会得到一张残余网络(算上反向边).
首先,容易发现如果一条边没有满流,那么这条边必然不是任意一个最小割中的一条边.
为什么?考虑先强制删掉这条边再计算最小割,显然只有当此时的最小割加上这条边等于原来的最小割这条边才能是一条可行边,但是此时最大流减少的量必然小于当前边的容量,所以这条边不可能是一条可行边.
但这仅仅是一条边是可行边的必要条件,我们还需要讨论更准确的条件.
考虑残余网络上的一条满流边 ( x , y ) (x,y) (x,y),如果 x x x还能通过其它非满流边到达 y y y,那么通过上面类似的讨论,我们发现这也不会是一条可行边,同时这也是 ( x , y ) (x,y) (x,y)作为可行边的充分必要条件.
再来考虑 ( x , y ) (x,y) (x,y)作为必经边的条件,我们发现只要 x x x和源点 S S S可以相互到达, y y y和汇点 T T T在残余网络上可以相互到达即可.
这两个判定中的所有条件均可以转化为在残余网络上判定两点是否同属于一个SCC,通过一次tarjan算法就可以实现.
四.最小割的数学模型.
最小割有一个对应的数学模型.
我们考虑将网络上源点 S S S和汇点 T T T外的每个点都看成一个 0 / 1 0/1 0/1变量,最后与 S S S相连的点为 0 0 0,与 T T T相连的点为 1 1 1.
那么对于一条边权为 v v v的边 ( S , x ) (S,x) (S,x),其贡献为 v x vx vx,同理边 ( x , T ) (x,T) (x,T)的贡献为 v ( 1 − x ) v(1-x) v(1−x).
而对于一条边权为 v v v的边 ( x , y ) (x,y) (x,y),其贡献为 v ( 1 − x ) y v(1-x)y v(1−x)y.
如果我们可以把问题抽象为 n n n个 0 / 1 0/1 0/1变量,同时贡献为以上三种形式,此时就可以利用最小割的数学模型来解决问题了.