算法学习笔记(8.3): 网络最大流 - 模型篇
本文慢慢整理部分模型。
DAG 最小路径覆盖
经典的题目,经典的思想。
网络流常见的将图上的点拆为入点和出点,那么路径由若干 出 - 入 - 出 - 入
的循环构成。
于是在拆好的图上流一流即可。
[CTSC2008] 祭祀 典中祭
黑白染色
利用黑白染色将整个图变成一个二分图是网络流常见的套路,尤其是在有 棋盘
状物出现的时候。
P3355 骑士共存问题 黑白染色,稍微搞搞就完事。
最小割
最大流等于最小割,这是一个对偶问题。
最小割的构造
从源点开始在残量网络上沿着有剩余流量的边走,这会走出一个连通块。
走到的点集为 ,剩下的为 ,那么最小割我们只需要选择 相交的那些边即可。
由于搜索的过程沿着有剩余流量的边走,所以一定满流。
最小割的可能与一定
可行边满足:
- 满流
- 没有可用流量
必要边满足:
- 满流
- 可以通过有剩余流量的边走到 ,而 可以走到
最小割与二选一问题
P4313 文理分科 典中典。
二选一如果是可行性那么首先联想 2-SAT
,如果是收益联想最小割。
考虑最小割使得 不连通,那么对于某一个元素 ,设选 的收益为 ,选 则为 ,那么连出类似于 的图,看是最大化还是最小化选择最小割还是其补集。
P2774 方格取数问题 差不多,不能相邻,也可以转化为 x选x
问题。
P1646 [国家集训队] happiness 令人 happy
的题。
# [Ceoi2008]order 多了一小点东西的最小割。
最小割树
如此构造,初始化当前点集 为所有点:
- 随机两个点 ,求出其最小割 ,在树上连边 。
- 利用最小割将点集划分为小的两个点集,递归上述操作。
如此我们可以构造出一个树,使得两点之间的 即是树上路径最小值。
考虑如果 的割是 ,那么两边点的 一定不大于 的 ,否则 就没法割掉。
然后就随便做了。
P4897 【模板】最小割树(Gomory-Hu Tree)
上下界流
费用流
最大权闭合子图
关于特殊的性质
抽象篇
# 5048. All Pair Maximum Flow 里面有很多很好的网络流相关的东西。
大致题意是给定一张平面图,求任意两点最大流的和。
注意到一个很重要的等式:
非常经典的一道题就是 # BZOJ1001 狼抓兔子,经典的最小割模型,但是边数和点数都很多,网络流不应该跑过的……但是就是过了。不过只要考虑到这是一个平面图,那么就可以利用最短路 做了。
回到本题,平面图上 的最大流 = 最小割 = 对偶图的最短路。
由于本题模型的特殊型,对偶出来的图实际上是一颗树,那么问题实际上是求在这颗树上分成两个点集之间的最短路。
以两两叶子之间的距离作为边权来求最小生成树,那么可以得到最小割树的对偶图(为什么呢?jiangly
是只说容易发现 QwQ)
之后就可以枚举树上的边算贡献了。
至于如何求这颗最小生成树,可以在对偶树上启发式合并贪心做到 ,类似于 CF888G. Xor-MST 在 trie
树上贪心的过程。
考虑对于一颗子树,显然是子树内的两个叶子相连比之间互相连优,但是由于需要联通,所以需要有相连的部分,那么在两个子树内找到最浅的两个点相连即可,这样就可以得出这个树了,然后枚举树上的边算贡献即可。
但是根据 陈峻宇
,有另外一种思考的方式。考虑这个平面图,是最外层的环与内部的一些边构成。
那么考虑最小割,一定存在一种方案,环上的最小边在这个最小割内。并且考虑最大流要经过这个环两次,那么我们可以将最小边断掉,并加在其所在的环的每一条边上,这样一定不影响两两的最小割。引用一张图:
那么不断的如此做下去,最终会得到一棵树,这颗树就是最小割树。
不过这个思路确实抽象。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?