zoukankan      html  css  js  c++  java
  • 有上下界的网络流小结

    令每一条边流量的上下界分别为up,low。

    无源汇上下界可行流:

    假设所有的边流量全部都为low,发现这样的一个网络并不符合流量平衡,其中有很多点的出流和入流不相等。于是我们的任务转化为在不合法的残量网络中凭空添加流量,使得所有的点满足流量平衡。

    可以发现对于一个凭空出现的流量,其经过的路径上除了起点的出流增加1,终点的入流增加1以外没有点的流量平衡发生改变,因为它流进来又流走了。

    因此,我们新建源点S汇点T(下面的S,T都是这个意义)。S向所有需要增加入流的点连边,容量为其增加入流的需要大小;所有需要增加出流的点向T连边,容量为其增加出流的需要大小;因为我们需要在不合法的残量网络上构造“凭空出现的流量”,保留原图的结构,每条边的容量为up-low。

    最后,如果所有新加的边满流(等价于与S或者与T向连的边满流),那么就存在可行流。

    下面假定原图中原点为1,汇点为N。

    有源汇上下界可行流:

    我们可以再连一条T->S容量为inf的边,然后就可以把这个图当成无源无汇的可行流来做了。

    因为新建的网络中的原网络部分是流量平衡的(我们通过加边把它补对了),因此此时t->s的边的流量就是一个可行流。

    有源汇上下界最大流:

    先跑可行流,得到一个可行流A,把T->S的边删掉,然后接着再残量网络上跑1->N的最大流得到B,A+B为答案(很好理解,得到一个可行流的基础上继续增广即可,新的网络中跑最大流时一定满足下界的限制)。

    有源汇上下界最小流:

    还是先跑可行流,得到一个可行流A,把T->S的边删掉,然后在残量网络上跑N->1的最大流得到B,A-B为答案(可行流上尽量多退流)。

  • 相关阅读:
    303. Range Sum Query
    【Leetcode】292. Nim Game
    【c++】函数默认参数
    [err]default argument given for parameter 3 of '***'
    [err]multiple definition of `***'
    【leetcode】290. Word Pattern
    【leetcode】283. Move Zeroes
    【leetcode】278. First Bad Version
    【leetcode】268. Missing Number
    【leetcode】263. Ugly Number
  • 原文地址:https://www.cnblogs.com/KKKorange/p/8672615.html
Copyright © 2011-2022 走看看