网络流(二)——最大流最小割定理
最小割
<1>什么是割?
引例:你的仇人是一个工厂老板.你要炸掉一些车,让他每个货物都运不到销售点.
炸掉越大的车,你越容易被发现.你希望炸掉的车的容量之和尽量小.
最小化这个值.
定义:选出一些边的集合,使得删除它们之后从源点无法到达汇点,那么这个集合就叫做一个割.
这些边的容量之和称作这个割的容量.
<2>最小割最大流定理
定理1:任取一个割,其容量大于最大流的流量.
证明:
从源点到汇点的每条路径都会经过割上的至少一条边.
割掉这些边之后,把源点能到达的点放到左边,不能到达的放到右边.
显然源点到汇点的流量不会超过从左边走向右边的次数,而这又不会超过从左边到右边的边的容量之和.
直观一点,假设你是在车装着货物的时候炸掉了它.
每个货物你至少付出1的代价炸掉(流量小于容量的时候你要付出比货物数更多的代价),所以你炸的代价不会小于货物数.
定理2:最小割的容量等于最大流的流量,且FF方法能够正确的求出它.
这意味着一个惊人的事实:你能够仅付出和货物数相同的代价,就把你的仇人的财路炸断.
证明:
考虑FF算法结束时,残量网络上没有了增广路.
那么我们假设这时候,从源点经过残量网络能到达的点组成的集合为X,
不能到达的点为Y.显然汇点在Y里,并且残量网络上没有从X到Y的边.
可以发现以下事实成立:
(1)Y到X的边流量为0.如果流量不为0那么应该存在一条从X到Y的反向边,于是矛盾.
(2)X到Y的边流量等于其容量.只有这样它才不会在残量网络中出现.
根据第一个条件,我们可以得知:没有流量从X到Y之后又回到了X.
所以当前流量应该等于从X到Y的边的流量之和,而根据第二个条件它又等于从X到Y的边容量之和.
而所有从X到Y的边又构成一个割,其容量等于这些边的容量之和.
这意味着我们找到一个流和一个割,使得前者的流量等于后者的容量.
而根据前面的结论,最大流的流量不会超过这个割的容量,所以这个流一定是最大流.
同样的,最小割的容量也不会小于这个流的流量,所以这个割也一定是最小割.
这就是FF法最后的局面(由于FF会终止,所以它必定求出这样一个局面),由此我们得出结论:FF是正确的,并且最大流等于最小割