上下界网络流小记

概述

上下界网络流,就是每条边不仅有流量上限,还有流量下限。和所有网络流一样,需要满足每个点入流量等于出流量,即流量守恒。

根据有无源汇以及要求可行流 / 最大流 / 最小流,可以分成如下几种。下面依次展开。

模板题在 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/

posted @ 2022-10-07 11:24  csxsi  阅读(52)  评论(0编辑  收藏  举报