Title

【网络流】最大流等于最小割

【网络流】最大流等于最小割

将网络流想象成是一张地下水管道的管道图。

而所有的在管道中流淌的水是起源同一个点,称这个点为源点,而这些水最终都会汇聚于同一点,这个点被称为汇点。

而每条管道都会有一个容量上限,而这个容量是必然会大于或等于(满载)流经这条管道的实际流量的(就好像杯子只能装不超过杯子容量的水一样)。

  • 流量小于等于容量,容量大于等于流量

    • 推论:

      1. \(\sum_{i=1}^{n}流量i<=\sum_{i=1}^{n}容量i\)

      2. \(\sum_{i=1}^{n}容量i>=\sum_{i=1}^{n}流量i\)

      (流量i和容量i都是一一对应的,都是属于管道i的两个属性)

不管大小,从源点通过管道流向汇点的水的总量叫做流,而在这些可以的流中,总量最大的叫做最大流。

而我们不妨规定摧毁一条管道的代价为这条管道的容量,那么我们可以在所有管道中选取一定量的管道进行摧毁的话,并且保证在来自源点的水再也无法流到终点,且在中途过程中就全部泄漏干净了,这样的话就说这是割。

而注意一下,一侧的管道是可以接受到来自源点的水,而另一侧的管道是虽然是没有有水经过的,但如果是”老鼠“(举个例子)在这些管道中行走,最终还是可以走到终点(汇点)。

同时规定可以接受到水的点(管道的两端)为集合S,能走到汇点的点为集合T。

所以,更准确的来讲,割是一个对图的一个划分,而划分的结果会产生两个关于点的集合,且一个割的大小为其砍去所有的边的容量和。而在所有的割里面按大小去挑一个最小的就为最小割

证明:最大流等于最小割

证明分三步走

  1. 第一步:任意一个流都小于等于任意一个割。

    就好像杯子只能装不超过杯子容量的水一样

  2. 第二步:构造出一个流等于一个割

    最大流之所以是最大流,可以换某种角度来思考,就是在当前的网络中没有办法再扩充流量了(反证:如果还有,就必然有大于当前状态的流量,而当前状态的流就不应该叫做最大流),而从微观的角度来看,是在这张网络图中,存在一定数量的边,它的流量恰好达到它的容量上限,而不妨,我们可以拿着这些割边去作为割的依据去形成一个割。

    而此时我们就构造出一个等于最大流的一个割。

    \(flow_{max}=cut_k\)

  3. 第三步:

    结合我们已经举出的第一步

    我们有

    \(flow_{max}<=cut_i\),\(cut_i\)为任意一种割

    \(cut_{k}>=flow_i\),f\(flow_i\)为任意一种流

    结合一下,我们有

    \(flow_i<=cut_{k}=flow_{max}<=cut_i\)

    提取部分,会发现

    \(cut_k<=cut_i\)

    因而\(cut_k\)就是所有\(cut\)中最小的,就是最小割,\(cut_k=cut_{min}\)

因而,最大流等于最小割得证。

posted @ 2021-11-26 20:48  BeautifulWater  阅读(371)  评论(0编辑  收藏  举报