最小割
概述
-
最小割在实质上是一种很...精妙的模型,与状压中的依赖式问题一样,都在一定程度上反映着决策之间的矛盾。
-
每一条从
到 的路径,其上的边都满足某种矛盾关系,必有一条边删掉。 -
根据对应边是实际边(即希望参与删除的)还是结构边(即为构成路径而添加的虚边或不许删的边,不希望参与删除),可以控制容量来调整删谁。
最大流最小割定理
-
对任意网络,其最大流流量等于其最小割容量。
-
证明:
-
首先,容易证明
。-
不妨假设
,于是将 中所有边(注意网络上其实只有正边,反边是我们为了退流构造的虚边)都从网络上删去。 -
显然这最多使
减少 ,于是 ,故 仍然连通(有增广路),与前设不符。
-
-
下面给出构造证明总有
。 -
在一个已经跑完最大流的残量网络上,我们从
出发进行 bfs(相当于做一遍 EK 来推流,这里只使用有容量的边),标记所有能到达的点。 -
对于所有满流边(这里不存在反边这种东西!但 bfs 的时候是会用有容量的反边的),如果其起点被标记而终点未被标记,则该边在我们的最小割中,否则不在。
-
注意,这不等价于取每条有流量的路径上的最左满流边边为割边(认为
在左边)!可能会绕后。 -
合法性:
-
容量为
的边集一定是合法割的超集。-
使用反证法。假设它们不足以构成一个割,则还存在其他路径。
-
既然满流边都容量为
也即相当于 ban 掉了,则对应路径上每条边都不满流,于是该路径为增广路,不符合已求出最大流的前设。
-
-
然后,所有取到的边其实足以堵住所有流。
-
若某条满流边的
就没有被标记,说明更靠前(这个更靠前指的是,唔,大概是分层图意义上的)的满流边已经把它的来源堵住了,换言之它堵在这里是架不到人的。 -
于是取出的边集足够作为一个割。
-
-
-
最优性:
-
考虑递归这个问题,每次随意选一条我们认为在最小割中的边,将它在图上删去,最大流流量一定减小
,且其他我们选中的边的 不变。 -
前者显然,后者不妨反证法:
-
首先注意到每条有流量路径上有且仅有一条边在最小割内,如果无则有流量,如果
则删去更小。 -
对于一条有流量路径,其一定是前缀被标记。不妨假设其不是前缀被标记,由其有流量可知每条边的反边都有容量,于是较后的标记点会把较前的未标记点标记,矛盾,故一定是前缀被标记。
-
如果某条边的
变化,则说明其一定和删去边共有流量路径;而上面的只标记前缀告诉我们,这条路径上的标记-无标记边一定只有一条,换言之只会有一条在我们认为的最小割中,矛盾,故 一定不变。 -
那么这样删下来,得到的恰为选中边的
,又它们都是满流边且 不变,故 ,又由割的定义,我们这样一条一条删一定有 ( 是那条边被删去时它的流量),于是 ,原命题得证。
-
-
另外,由于 Dinic 中我们会 bfs 判增广路存在性,不存在则返回最大流量,所以其实这个 bfs 做过了,直接用 Dinic 的 bfs 的结果就好。
-
-
注意:“最小割在数值上与最大流相等,但在本身性质上与最大流无任何关系。”不要落入最大流的窠臼!
例题
P1345 [USACO5.4] 奶牛的电信 Telecowmunication}
-
题意:
-
给定一张
点 边的无向图。 -
定义“删去一个点”为将一个点及与其相连的所有边删去。
-
问令
不连通至少要删去多少个点。
-
-
数据范围:
。 -
这是一道非常棒的最小割入门题。
-
我们看到,正常的网络是要删边,这里却是要删点。局面顿时复杂不少。
-
我会拆点!把无向边拆成有向边,把每个点拆成
, 接受所有入边,然后连一条出边到 , 发出所有出边。 -
不错。可是我们要怎么做才能确保一定不会删到
以外的其他正常边? -
这就到流量发威的时候了。令原有边的容量为
,虚边的容量为 。问题解决。 -
最后边数大概在
,总复杂度还是 。
P1361 小M的作物
-
题意:
-
有
种作物,第 种种在田地 中收益 ,种在 中收益 。 -
另有
种组合,如果第 个组合中的作物共同种在 或 ,则有 或 的额外收益。 -
求最大总收益。
-
-
数据范围:
。 -
首先很容易想到把每个作物开一个点,把
作为 , 作为 ,自 向每个作物连容量为 的边,自每个作物向 连容量为 的边。 -
可是,组合怎么办?考虑先对每个组合建一个点,然后和上面一样地连边,毕竟互相矛盾。
-
接下来,
一侧的组合和所有组合中作物连向 的边矛盾...所以从组合点向所有作物连容量为 的边。 -
于是构成了
的路径,要么放弃 的容量,要么放弃 容量。 -
可是难道...也从所有作物向组合连边?不对。得把组合开两个虚点,分别处理。
-
解释一下原因,毕竟我在这里挂了一次:
-
这样做就会出现
权环,考虑 , 的情况,其中 为组合的虚点。 -
于是此时存在一条路径
, 和 矛盾了,和我们的需求不符。
-
-
这里因为网络流要建反边所以会有重边,但是网络流重边不敏感。
-
于是
即为答案。 -
谈一下复杂度:建完图之后点数上界
,边数上界 ,乍一看网络流复杂度是一定炸掉的。 -
但是这里图只有两层,Dinic 几乎没有外层复杂度。虽然内层的
也趋于 ,看起来毫无希望,但事实上边数那么多的话图就极其稠密,已经趋于 了。 -
那么显然我们可以期望 Dinic 发挥出它强大的
的力量,横竖没有 就算成功!
P1344 [USACO4.4] 追查坏牛奶 Pollutant Control
-
题意略。
-
第一问无疑是个最小割板子,第二问怎么办?
-
某,有一奇技淫巧:把每条边的容量
,这里 。 -
于是求出的最小割的整数部分应该不变,小数部分事实上反映了割了几条,且会尽量少割。最大流那边只是数值相等,不用关心图论意义。
-
唔...事实上,是可行的。而且建议乘一个足够大的数转到整型范围。
P2057 [SHOI2007] 善意的投票 / [JLOI2010] 冠军调查
-
题意略。
-
首先容易看出是最小割。
-
本题的建模比较有趣,我们详细谈谈:
-
代表睡觉。从 向所有想睡觉的小朋友连边。 -
代表不睡觉。从所有不想睡觉的小朋友向 连边。 -
对于每一对朋友....朋友怎么连边?
-
-
不妨先处理分居左右(认为
在左)的朋友对 。显然应该只需要从左向右连边(从右向左连的边,最大流中就应当是没用的,最小割下也没有实际意义),考察其实际意义:-
割
的边: 改主意了,不睡觉。但是要付出他违背自己意愿的代价。 -
割
的边:硬吃这一对朋友选择不同的代价。 -
割
的边: 改主意了。
-
-
那问题来了。同一边的朋友怎么办?不用连边?
-
不行,残量网络是一个动态的东西。考虑
都在左边的情况,可能割了某条 之后 等效在右边,于是此时 构成矛盾。 -
所以这不是二分图,同部点之间有边。必须连双向边。当然,跨部边事实上可以单向(但没必要)。
-
复杂度
。
P2598 [ZJOI2009] 狼和羊的故事
-
题意略。知道这是网络流的话不太难,没猜到是网络流就寄了,我是在题单里做到的那种,所以真被 shock 一下我估计我也做不出来...
-
。然后求最小割。 -
一个比较有趣的问题是,为什么这样的篱笆一定是连续的。
-
感性理解的话证明不难:有豁口的话一定还有
的路径。 -
或者说,这个网络和原图的连通性是等效的。
P2774 方格取数问题
-
题意略。一看就很最小割啊。
-
相邻两个数至少有一个不选...考虑把每个点拆成 in 和 out。
-
对
,和所有四连通的 连 。 -
...好像有问题,考虑 的一个网格,建出来图发现它会割两条边。可能会各割一次或者把某个割两次。 -
黑白染色。黑点和
连,白点和 连(边权为 );黑连向白( )。 -
啊于是这样一来拆点也没有必要了。
,不过网络流复杂度大家都知道。
P2762 太空飞行计划问题
-
题意略。妙妙题!至少对现在(写到这里时)的我来说!
-
输入数据确实毒,我的想法是
getline
进来在上面跑mygc
。不过这个不重要。 -
首先费用流的话,有点怪,因为不知道流量是干嘛的;最大流也有点怪,负流量是什么鬼;最小割?没道理啊。
-
我有一个想法:跑费用流。流量代表做几个实验,依次把从
流出的流量设为 ,挨个试一试,当然实际上是在残量网络上加流量。 -
但是,怎么表示仪器的存在性,或者说实验对其存在性的依赖?...好像没办法。
-
贺讨论区后想到了一种非常妙(可能只是因为我最小割做得少)的建模:用边表示不买某个仪器,而非买某个仪器! -
,这里 表示 equipment, 表示 experiment,中间的那种边只有有依赖关系的才连。 -
于是得解。构造参看最小割最大流定理的构造证明。
-
另外本题的建模有更一般化的做法并可以引出一系列问题,参看《最小割模型在信息学竞赛中的应用》-胡伯涛。
P4174 [NOI2006] 最大获利
-
题意略。可以看出和上一道题基本同构。
-
首先令
,相当于建出所有基站;然后从源点向基站连边,流量为不建它能省的钱;从用户群向汇点连边,容量为其对应的获益;基站到用户群之间的边保留,容量为正无穷。 -
复杂度
,唉算了你管它干啥。
P3355 骑士共存问题
- 题意略。二分图最大独立集板子,和方格取数没啥区别。略。
某 T1 割
P5934 [清华集训2012] 最小生成树
-
题意:给出一张无向连通图,求至少删多少条边后给定的一条边既可以在最小生成树中,又可以在最大生成树中。
-
数据范围:
。 -
首先,基于 Kruskal 算法,边权为
的边在最小/大生成树中,就代表着仅保留 的边时原图不连通。 -
故分别建图跑最小割,源汇点分别为给定边的源汇点(因为给定边必须对连通有贡献),将两个最小割求和即可。之所以是求和是因为两张图的边集无交。
-
时间复杂度...就,理论
呗。我也不知道这么大的数据范围怎么敢出的。upd:由 OI Wiki,在单位网络上增广轮数为 ,于是纸面复杂度 ,能过是有道理的。
P5039 [SHOI2010] 最小生成树
-
题意:给出一张无向连通图,可以花费
的代价将某条边的边权 ,求使给定边一定在最小生成树中的最小代价。 -
数据范围:
。 -
沿用上一题的结论。发现边权差不太好处理,思考发现割它的代价即为它的容量,于是令容量为边权差即可。解决,复杂度
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】