有上下界的网络流小结
令每一条边流量的上下界分别为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为答案(可行流上尽量多退流)。