上下界网络流小结

来源:互联网 发布:同花顺扩展数据管理器 编辑:程序博客网 时间:2024/05/16 08:46

之间一直对上下界网络流不是很熟悉,今天就来小结一下!

无源汇的上下界网络流

对于一般的网络流每条边流量的下界是0所以不需要特别处理,但是有些网络流问题每条边会有一个流量下界,我们可以用一个二元组(low,up)来表示一条下界为low,上界为up的边。

那么对于每个点,要满足:+=+。为了把之类问题转化成最大流为题,那么我们先要把所有的下界流流完。

既然如此,我们就强行让下界流流满,即我们新增两个节点SSTT。对于一个点,如果有一条下界为low的入流,那么就让SS向它连一天流量为low的边。假如有一个下届为low的出流,就把这个点向TT连一条流量为low的边。最后再把每条边的流量变为(0,uplow)。然后我们在由SSTT跑一遍最大流,如果SS连出的边都满流,那么这幅图是可以满足每条边的下界流量的,否则不行。

为什么要这样把图重建?其实我们就是强制让每条边流满下界,我们把没条边的下界流都独立出来变成从SSTT的必经流,并且放入我们剩下的图中跑。如果所有下界流都满流,那么肯定这幅图是可行的。否则肯定是不可行的!

有源汇的上下界最大流

有源汇相比无源汇就是增加了一个源点和一个汇点,那么我们怎么把这个问题转化成我们已经解决过的问题。那么除了上面向SSTT连的边,我们另外加一条特殊的边,即从TS连一条(0,+),那这就变成无源汇的网络流了!

但是我们现在要求的是最大流,第一遍SSTT的对最大流的贡献为TS流的流量,即这条边的反向边的流量(这是为什么?我也不是很清楚……)但是我们只流了原图中的下界流,对于原图中的自由流可能还没流完!那么把SSTT删掉,把TS的边删掉。再从ST流一遍最大流,最后加上之前的贡献就是最大流的答案了。

有源汇的上下界最小流

最大流是在有限制流的基础上流最大的可行流,最小流就是在有限制流的基础下流最小的可行流。前面的做法一样,只不过第二次跑最大流不是从S跑到T,而是从TS把可以退流的自由流退掉,那么之前的贡献减去第二次的流量就是最小流。

4 0