网络流(二)——最大流最小割定理

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

原文地址:https://www.cnblogs.com/yanyiming10243247/p/9384952.html

时间: 2024-08-02 23:46:58

网络流(二)——最大流最小割定理的相关文章

hihocoder 网络流二&#183;最大流最小割定理

网络流二·最大流最小割定理 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi:在上一周的Hiho一下中我们初步讲解了网络流的概念以及常规解法,小Ho你还记得内容么? 小Ho:我记得!网络流就是给定了一张图G=(V,E),以及源点s和汇点t.每一条边e(u,v)具有容量c(u,v).网络流的最大流问题求解的就是从s到t最多能有多少流量. 小Hi:那这个问题解决办法呢? 小Ho:解决网络流的基本思路就是寻找增广路,不断更新残留网络.直到找不到新的增广路,此时得到的

hihoCoder 1378 网络流二&#183;最大流最小割定理 (网络流学习#2 记录)

题目链接:http://hihocoder.com/problemset/problem/1378 代码: #include<bits/stdc++.h> using namespace std; const int maxn=505; int c[maxn][maxn],pre[maxn],flow[maxn][maxn],INF=0x3f3f3f3f,n,vis[maxn]={0},flag=0,num=0; int bfs(int s,int t) { for(int i=1;i<

网络流基础-最大流最小割定理

最大流最小割定理,指网络流的最大流等于其最小割. 最大流指符合三个性质的前提下,从S到T能流过的最大流量. 最小割指符合割的定义,最小的割容量. 求最大流: 不断寻找增广路,计算能增加的最小流量,然后增加. 找到一条增光路,最多能流过2,则: 找到第二条路径: 最后还剩a-c-e一条,则可计算出最大流量为4. 但遇到以下情况,且第一条路径为a-b-c-d时,就不行了: 此时需要增加反向路径,即当减去增广路时,反向加上减去的流量,提供后悔的选择: 这样,当考虑a-c-b-d时,可以对冲掉b-c的流

网络的最大流最小割定理

什么是流(flow): 在一个有向图中,只有出去的边没有进来的边的节点叫做源(source),只有进来的边没有出去的边的节点叫做汇(sink),其它的节点进来的边和出去的边应该是平衡的. 边上可以加权值,假设对于一个交通图来说,可以认为边上的权重为一条道路上的最大流量.那么对于图中任意两个节点来说,它们之间可以存在很多路径,每条路径上可以负载的最大流量应该是这条路径上权重最小的那条边所能承载的流量(联想一下“瓶颈”这个词,或者木桶理论),那么所有的路径上所负载流量之和也就是这两个节点之间多能通过

【codevs1907】方格取数3(最大流最小割定理)

网址:http://codevs.cn/problem/1907/ 题意:在一个矩阵里选不相邻的若干个数,使这些数的和最大. 我们可以把它看成一个最小割,答案就是矩阵中的所有数-最小割.先把矩阵按国际象棋棋盘黑白染色(即把相邻的点分别染成白色和黑色),然后黑点连源点,白点连汇点.割掉一个点到源/汇的边就是不选择这个点,最后的目的就是使源到汇不连通(不引发题目不能选择位置相邻的数的矛盾). 然而最小割怎么求呢? 于是我们就要引入一个定理:最大流最小割定理.它的意思就是说,在一个图中,a点到b点的最

[最短路,最大流最小割定理] 2019 Multi-University Training Contest 1 Path

题目:http://acm.hdu.edu.cn/showproblem.php?pid=6582 Path Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 3747    Accepted Submission(s): 1075 Problem Description Years later, Jerry fell in love

网络流(三)最大流最小割定理

转载:https://blog.csdn.net/w417950004/article/details/50538948 割(CUT)是网络中顶点的划分,它把网络中的所有顶点划分成两个顶点的集合源点S和汇点T.记为CUT(S,T). 如下图:源点:s=1;汇点:t=5.框外是容量,框内是流量 如下图是一个图的割.顶点集合S={1,2,3}和T={4,5}构成一个割. 如果一条弧的两个顶点分别属于顶点集S和T那么这条弧称为割CUT(S,T)的一条割边.  从S指向T的割边是正向割边,从T指向S的割

最大流最小割定理

一.割的定义 例子: 2.割边的概念 例子: 3.割的容量 二.网络流与割的关系 1.结论 2.定理1: 3.推论: 4.定理2 5.定理3: 6.结论: 7.一些1求解: 三.应用实例 最大净收益: 三个实验,三个实验器材:进行实验2与实验3的净收益: 至此,最大流与最小割的理论介绍已经结束,感谢有这样一份ppt,基本上能明白其中的原理:这个理论在图割算法中有应用,接下来会继续探究一下.

hiho 第116周,最大流最小割定理,求最小割集S,T

#include <bits/stdc++.h> using namespace std; #define maxn 505 #define INF 0x3f3f3f3f struct Edge { int from,to,cap,flow; }; struct Dinic { int n,m,s,t; vector<Edge> edge; vector<int> G[maxn]; bool vis[maxn]; int d[maxn]; int cur[maxn];