上下界网络流小记

概述

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

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

模板题在 LOJ 上有。

懒得画图了!

无源汇上下界可行流

先把每条边的流量设为下限,这个时候有可能存在点流量不守恒,那么我们就需要调整。

考虑添加一些附加边,使得原图(即每条边流量都是下限的网络)和这个附加图(每条边流量就是附加边的流量)对应边的流量加起来会流量守恒。

首先,对于原图的一条边 (u,v,l,r),我们需要在附加图上加入边 (u,v,rl),表示可以调整的流量。

然后,建立超级源点 S 和超级汇点 T,设 dlti 表示原图中点 i 的入流量减出流量:

  • dlti=0,则流量守恒,不需要附加流量;
  • dlti>0,则需要附加图中出流量大于入流量,那么连边 (S,i,dlti)
  • dlti<0,则需要附加图中入流量大于出流量,连边 (i,T,dlti)

如果 S 连出去的所有附加边满流,说明这一个点可以满足流量守恒,否则这个点就不能流量守恒。

在建图完毕之后跑 ST 的最大流,若 S 连出去的边全部满流,则存在可行流,否则不存在。

模板题代码:https://loj.ac/s/1597229

有源汇上下界可行流

由汇点 T 向源点 S 连一条下界为 0,上界为 的附加边,得到一张和原图等价的无源汇网络。

于是问题就转化成了无源汇上下界可行流。此时从源点到汇点的可行流流量,即为从汇点到源点的那条附加边的流量(注意下界网络中对应边流量为 0)。

值得一提的是,给出的源点和汇点现在已经被看成普通点,我们需要建立新的超级源点 S 和超级汇点 T

有源汇上下界最大流

跑一遍有源汇上下界可行流,那么已知流量就是 TS 的附加边的流量(因为流量守恒)。

要求从 ST 的最大流,我们可以删除所有附加边(实际上必须删的只有 (T,S,0,) 这条边,因为如果存在可行流那么连接 ST 的边流量都已经是 0 了,对答案没有影响),然后以 ST 为源点与汇点,再求残量网络的最大流,加上可行流的流量即为原网络的最大流。

这是因为,可行流已经保证了流量守恒,那么删去附加边后,我们再跑一次最大流,流量仍然守恒。

在残量网络上跑最大流得到了可以额外增广的流量,加上之前求出的可行流就是要求的最大流。

模板题代码: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 @   csxsi  阅读(65)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
历史上的今天:
2020-10-07 ARC104 A~D 题解
2020-10-07 ACL Beginner Contest 题解
点击右上角即可分享
微信分享提示