概述
上下界网络流,就是每条边不仅有流量上限,还有流量下限。和所有网络流一样,需要满足每个点入流量等于出流量,即流量守恒。
根据有无源汇以及要求可行流 / 最大流 / 最小流,可以分成如下几种。下面依次展开。
模板题在 LOJ 上有。
懒得画图了!
无源汇上下界可行流
先把每条边的流量设为下限,这个时候有可能存在点流量不守恒,那么我们就需要调整。
考虑添加一些附加边,使得原图(即每条边流量都是下限的网络)和这个附加图(每条边流量就是附加边的流量)对应边的流量加起来会流量守恒。
首先,对于原图的一条边 \((u,v,l,r)\),我们需要在附加图上加入边 \((u,v,r-l)\),表示可以调整的流量。
然后,建立超级源点 \(S\) 和超级汇点 \(T\),设 \(dlt_i\) 表示原图中点 \(i\) 的入流量减出流量:
- 若 \(dlt_i=0\),则流量守恒,不需要附加流量;
- 若 \(dlt_i>0\),则需要附加图中出流量大于入流量,那么连边 \((S,i,dlt_i)\);
- 若 \(dlt_i<0\),则需要附加图中入流量大于出流量,连边 \((i,T,-dlt_i)\)。
如果 \(S\) 连出去的所有附加边满流,说明这一个点可以满足流量守恒,否则这个点就不能流量守恒。
在建图完毕之后跑 \(S\) 到 \(T\) 的最大流,若 \(S\) 连出去的边全部满流,则存在可行流,否则不存在。
模板题代码:https://loj.ac/s/1597229。
有源汇上下界可行流
由汇点 \(T\) 向源点 \(S\) 连一条下界为 \(0\),上界为 \(\infty\) 的附加边,得到一张和原图等价的无源汇网络。
于是问题就转化成了无源汇上下界可行流。此时从源点到汇点的可行流流量,即为从汇点到源点的那条附加边的流量(注意下界网络中对应边流量为 \(0\))。
值得一提的是,给出的源点和汇点现在已经被看成普通点,我们需要建立新的超级源点 \(S'\) 和超级汇点 \(T'\)。
有源汇上下界最大流
跑一遍有源汇上下界可行流,那么已知流量就是 \(T\) 到 \(S\) 的附加边的流量(因为流量守恒)。
要求从 \(S\) 到 \(T\) 的最大流,我们可以删除所有附加边(实际上必须删的只有 \((T,S,0,\infty)\) 这条边,因为如果存在可行流那么连接 \(S'\) 和 \(T'\) 的边流量都已经是 \(0\) 了,对答案没有影响),然后以 \(S\) 与 \(T\) 为源点与汇点,再求残量网络的最大流,加上可行流的流量即为原网络的最大流。
这是因为,可行流已经保证了流量守恒,那么删去附加边后,我们再跑一次最大流,流量仍然守恒。
在残量网络上跑最大流得到了可以额外增广的流量,加上之前求出的可行流就是要求的最大流。
模板题代码:https://loj.ac/s/1597399。
有源汇上下界最小流
和最大流类似,不过是换成在残量网络上以 \(T\) 为源点,\(S\) 为汇点跑最大流,答案就是可行流流量减去最大流流量。
可以理解为在残量网络上退回一些流量,仍然保持流量守恒。
模板题代码:https://loj.ac/s/1597404。
参考学习
https://zhuanlan.zhihu.com/p/324507636
https://www.cnblogs.com/caterpillor/p/15658834.html
https://oi-wiki.net/graph/flow/bound/
标签:可行,源点,网络,附加,下界,汇点,流量,小记 From: https://www.cnblogs.com/xsl19/p/flow-bound-note.html