上下界网络流——学习笔记

来源:互联网 发布:php posix getpid 编辑:程序博客网 时间:2024/06/04 17:59

这个网上写的好的文章很多啊,
http://www.cnblogs.com/liu-runda/p/6262832.html
http://www.cnblogs.com/kane0526/archive/2013/04/05/3001108.html
我就随便写一下好了。
大概就分下面这几种,其中核心思想都一样,只要懂第一个其他的就没问题了。

  1. 无源汇有上下界可行流
    先令每条边的流量等于流量下限,得到一个初始流,然后建出这个流的残量网络。
    这个初始流不满足流量守恒,因此最终的可行流一定是在这个初始流的基础上增大了一些边的流量使得所有点满足流量守恒。
    现在我们需要在初始流的残留网络中多加一些辅助的边和点来转化问题。刷出一个附加流,使得附加流于初始流加起来满足流量守恒。
    我们考虑:
    如果i点流入量>流出量, 我们需要让多的流出量有一个来路,建一条SS指向i的流量=A[i]的边。
    如果i点流出量>流入量,我们需要给多的流入量找一个去处,建一条从i到TT流量为-A[i]的边。
    在然后在上面刷最大流即可。
  2. 有源汇有上下界可行流
    连一条T到S的流量无限制的边,然后就转化成无源汇的了。
    怎么求这个可行流的总流量呢?很巧妙的办法,因为每条边实际流量等于流量下界+附加流中的流量,且S到T的总流量等于T到S的总流量。所以我们直接看一下最后加的那条T到S的边就行了。总流量=flow(T,S)+0=flow(T,S)。
  3. 有源汇有上下界最大流
    先按上面的方法求出可行流,然后在原图残量网络上刷最大流增广即可。
    不用担心之后会把某些边的流量减的小于下界,因为我们一开始建的图就是把大小等于流量下限的流量拿出去之后的残量网络, 这些流量根本没有在图中出现,不会被减掉。
  4. 有源汇有上下界最小流
    任然先求可行流,然后我们反着考虑,在可行流的残量网络上跑T到S的最大流,用可行流的大小减去这一次最大流的大小就是最小流的大小。
原创粉丝点击