模拟费用流与反悔贪心小记
0. 一些约定
若无特殊说明,我们约定:
代表一条 到 ,容量为 ,费用为 的边。 代表容量为 ,费用为 的边。 代表源点, 代表汇点。
1. 概括
模拟费用流与反悔贪心有着非常相似的思想,有些时候可以互相代替。无论是哪种解法,都能通过反悔决策增量地维护答案,因此有时可以解决动态规划或朴素贪心难以解决的问题。
2. 性质与基本思路
-
费用流模型关于流量具有凸性,可以通过费用流模型证明 wqs 二分的可行性。
-
在一些简单费用流模型里,不妨观察增广路和负环形式,简化费用流计算。时刻注意,在正常的费用流中,增广路是不会有环的。
-
在部分费用流模型里,可以将费用流退流决策一起放入计算中。
-
在模拟 EK 算法时,如果数据允许,可以尝试增量加边。
-
反悔贪心的反悔决策如果不能用增量比较,尝试用朴素的贪心策略进行反悔。
-
反悔贪心可以用双向链表,优先队列维护差值等方式进行连续反悔。
-
在反悔决策不明朗时,尝试将反悔也当成可行决策。
-
反悔时的增量可以看情况选择,有时不一定是一个一个增加的。
3. 模拟费用流例题
- 类型一:费用流模型证明 wqs 二分可行性。
发现这个问题如果直接反悔贪心有三种决策,分别是组一对新的
费用流建模是容易的。
有了建模之后就有凸性了,考虑给
解除限制之后的 dp 非常典,现在考虑如何建模。
将每个坑的间隔看成一个点,每个坑成一条边,有公共坑的间隔连一条权为坑的权的边,边容量都是
- 类型二:简化费用流计算。
uoj 差评榜 rk3(好像是),鉴定为蒸。
这个题可以用反悔贪心解释:
我们给两个堆,堆
当加入一个餐厅时:
- 寻找一个未匹配的送餐员,抑或是寻找一个可以替换的已在匹配中的餐厅。从堆
中找,假设代价是 ,则贡献是 。如果撤销该决策,多出这个餐厅,代价为 ,加入到 中,再将替换这个餐厅的贡献 加入堆 。 - 否则将
加入 中。
当加入一个送餐员时:
- 寻找一个可以匹配的餐厅,抑或寻找一个可以替换的已在匹配中的送餐员。从
中找,假设代价是 ,则贡献是 。如果撤销此决策,多出这个送餐员,代价为 ,加入到堆 中。 - 否则将
加入到 中。
这里有一个细节,那就是为了让它满流,我们提前往
这里告诉我们反悔贪心的另一个套路,那就是将反悔与普通决策同质化。但是这里我要引出一个很厉害的费用流模型来解释这个反悔贪心。
先上图:

这张图的源点是
现在考虑模拟 EK 算法,先单路增广

代价即为

整体上,你加上了
为什么要多讲一个费用流模型,因为接下来还有用这个模型解释的题(在反悔贪心那儿)。
Olympiad in Programming and Sports
这题数据范围其实可以直接费用流解,但是模拟费用流也是可以的。
本题的费用流模型这么建:建一个二分图,下部
之外的增广路都是不优的(大概画一画,发现因为只有两个点,其他的都会形成负环,不可能出现)。
与
另一种很有启示的思路:考虑一条一条加入
之后我们继续加入
剩下的增广都不经过新加的
这也告诉我们,在一些模型里,尝试提前增广一类型的边可以简化问题。下一道题就是这样。
上一道题能不能也这样做?回去再想想。
蔬菜越来越多,我该怎么办?
嘴巴一下:
给每天建个点,往
考虑倒推,每天加入当前的
好的你现在会
有点嘴巴,详细说说。
考虑先建模,每天建一个点,往
直接跑就是对的。如果我们做单测的话可以直接从那天开始,一次一天一天往前走,每天增广当前的
如果多测的话,我们先用跑出
如果你在考场上一眼瞪出可以费用流建模,就已经有二分套二分的
建模如下:建一张二分图,左右部分别当
仍然考虑优先增广较为特殊的边,也就是那两个虚点中间的边。很明显,直接找到
继续增广,现在只能增广
增广路有四种:
拿
在重做这道题的过程中,得到了一点经验,那就是在在手动寻找增广路径比较困难时,一定要记得使用小数据对拍 + 手玩,往往可以拍出漏掉的增广路。还是那句话,让程序帮你做麻烦的事情。
4. 反悔贪心例题
- 类型一:尝试使用普通贪心策略反悔。
如果只有
将
剩下没配上的人和位置再按
听上去挺嘴巴的,但是确实没问题。
- 类型二:将反悔决策同质化。
雪灾与外卖的严格加强版,把数轴改成了树。
这题用网络流模型不好分析,但是也不是不行,先考虑反悔贪心的想法。
拆贡献成
考虑雪灾与外卖的类似分析,两个堆
在每个节点上往
那么如果连接他们的贡献为
直接拿配对堆暴力向上合并就行了,注意回收内存。
如果要用模拟费用流解释的话,大致思路就是,仿照雪灾与外卖拆点,
如果这题不是树而是 DAG 的话,能有同样的优化方法吗?其实在原来的建模越来越接近一般图的情况下,模拟费用流越接近普通的费用流算法。所以在反悔贪心时,也可以用费用流建模考虑反悔贪心的可行性。
upd:貌似 DAG 的话跟最小链覆盖差不多,那应该寄了(
本文作者:_kkio
本文链接:https://www.cnblogs.com/hikkio/p/17847117.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效