之间一直对上下界网络流不是很熟悉,今天就来小结一下!
无源汇的上下界网络流
对于一般的网络流每条边流量的下界是0所以不需要特别处理,但是有些网络流问题每条边会有一个流量下界,我们可以用一个二元组 (low,up) 来表示一条下界为 low ,上界为 up 的边。
那么对于每个点,要满足: ∑进来的界流+∑进来的自由流=∑出去的界流+∑出去的自由流 。为了把之类问题转化成最大流为题,那么我们先要把所有的下界流流完。
既然如此,我们就强行让下界流流满,即我们新增两个节点 SS , TT 。对于一个点,如果有一条下界为 low 的入流,那么就让 SS 向它连一天流量为 low 的边。假如有一个下届为 low 的出流,就把这个点向 TT 连一条流量为 low 的边。最后再把每条边的流量变为 (0,up−low) 。然后我们在由 SS 向 TT 跑一遍最大流,如果 SS 连出的边都满流,那么这幅图是可以满足每条边的下界流量的,否则不行。
为什么要这样把图重建?其实我们就是强制让每条边流满下界,我们把没条边的下界流都独立出来变成从 SS 到 TT 的必经流,并且放入我们剩下的图中跑。如果所有下界流都满流,那么肯定这幅图是可行的。否则肯定是不可行的!
有源汇的上下界最大流
有源汇相比无源汇就是增加了一个源点和一个汇点,那么我们怎么把这个问题转化成我们已经解决过的问题。那么除了上面向
SS
和
TT
连的边,我们另外加一条特殊的边,即从
T
向
但是我们现在要求的是最大流,第一遍
SS
到
TT
的对最大流的贡献为
T
向
有源汇的上下界最小流
最大流是在有限制流的基础上流最大的可行流,最小流就是在有限制流的基础下流最小的可行流。前面的做法一样,只不过第二次跑最大流不是从
S
跑到