流网络的最小割问题c语言,网络流(二)——最大流最小割定理

最小割

<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是正确的,并且最大流等于最小割

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值