上下界网络流小记
概述
上下界网络流,就是每条边不仅有流量上限,还有流量下限。和所有网络流一样,需要满足每个点入流量等于出流量,即流量守恒。
根据有无源汇以及要求可行流 / 最大流 / 最小流,可以分成如下几种。下面依次展开。
模板题在 LOJ 上有。
懒得画图了!
无源汇上下界可行流
先把每条边的流量设为下限,这个时候有可能存在点流量不守恒,那么我们就需要调整。
考虑添加一些附加边,使得原图(即每条边流量都是下限的网络)和这个附加图(每条边流量就是附加边的流量)对应边的流量加起来会流量守恒。
首先,对于原图的一条边 ,我们需要在附加图上加入边 ,表示可以调整的流量。
然后,建立超级源点 和超级汇点 ,设 表示原图中点 的入流量减出流量:
- 若 ,则流量守恒,不需要附加流量;
- 若 ,则需要附加图中出流量大于入流量,那么连边 ;
- 若 ,则需要附加图中入流量大于出流量,连边 。
如果 连出去的所有附加边满流,说明这一个点可以满足流量守恒,否则这个点就不能流量守恒。
在建图完毕之后跑 到 的最大流,若 连出去的边全部满流,则存在可行流,否则不存在。
模板题代码:https://loj.ac/s/1597229。
有源汇上下界可行流
由汇点 向源点 连一条下界为 ,上界为 的附加边,得到一张和原图等价的无源汇网络。
于是问题就转化成了无源汇上下界可行流。此时从源点到汇点的可行流流量,即为从汇点到源点的那条附加边的流量(注意下界网络中对应边流量为 )。
值得一提的是,给出的源点和汇点现在已经被看成普通点,我们需要建立新的超级源点 和超级汇点 。
有源汇上下界最大流
跑一遍有源汇上下界可行流,那么已知流量就是 到 的附加边的流量(因为流量守恒)。
要求从 到 的最大流,我们可以删除所有附加边(实际上必须删的只有 这条边,因为如果存在可行流那么连接 和 的边流量都已经是 了,对答案没有影响),然后以 与 为源点与汇点,再求残量网络的最大流,加上可行流的流量即为原网络的最大流。
这是因为,可行流已经保证了流量守恒,那么删去附加边后,我们再跑一次最大流,流量仍然守恒。
在残量网络上跑最大流得到了可以额外增广的流量,加上之前求出的可行流就是要求的最大流。
模板题代码:https://loj.ac/s/1597399。
有源汇上下界最小流
和最大流类似,不过是换成在残量网络上以 为源点, 为汇点跑最大流,答案就是可行流流量减去最大流流量。
可以理解为在残量网络上退回一些流量,仍然保持流量守恒。
模板题代码:https://loj.ac/s/1597404。
参考学习
https://zhuanlan.zhihu.com/p/324507636
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 题解