最小割

概述

  • 最小割在实质上是一种很...精妙的模型,与状压中的依赖式问题一样,都在一定程度上反映着决策之间的矛盾。

  • 每一条从 ST 的路径,其上的边都满足某种矛盾关系,必有一条边删掉。

  • 根据对应边是实际边(即希望参与删除的)还是结构边(即为构成路径而添加的虚边或不许删的边,不希望参与删除),可以控制容量来调整删谁。

最大流最小割定理

  • 对任意网络,其最大流流量等于其最小割容量。

  • 证明:

    • 首先,容易证明 minc(S,T)maxf(S,T)

      • 不妨假设 c(S,T)<maxf(S,T),于是将 c 中所有边(注意网络上其实只有正边,反边是我们为了退流构造的虚边)都从网络上删去。

      • 显然这最多使 f(S,T) 减少 c(S,T),于是 f>0,故 S,T 仍然连通(有增广路),与前设不符。

    • 下面给出构造证明总有 minc(S,T)=maxf(S,T)

    • 在一个已经跑完最大流的残量网络上,我们从 S 出发进行 bfs(相当于做一遍 EK 来推流,这里只使用有容量的边),标记所有能到达的点。

    • 对于所有满流边(这里不存在反边这种东西!但 bfs 的时候是会用有容量的反边的),如果其起点被标记而终点未被标记,则该边在我们的最小割中,否则不在。

    • 注意,这不等价于取每条有流量的路径上的最左满流边边为割边(认为 S 在左边)!可能会绕后。

    • 合法性:

      • 容量为 0 的边集一定是合法割的超集。

        • 使用反证法。假设它们不足以构成一个割,则还存在其他路径。

        • 既然满流边都容量为 0 也即相当于 ban 掉了,则对应路径上每条边都不满流,于是该路径为增广路,不符合已求出最大流的前设。

      • 然后,所有取到的边其实足以堵住所有流。

        • 若某条满流边的 s 就没有被标记,说明更靠前(这个更靠前指的是,唔,大概是分层图意义上的)的满流边已经把它的来源堵住了,换言之它堵在这里是架不到人的。

        • 于是取出的边集足够作为一个割。

    • 最优性:

      • 考虑递归这个问题,每次随意选一条我们认为在最小割中的边,将它在图上删去,最大流流量一定减小 f(s,t),且其他我们选中的边的 f(s,t) 不变。

      • 前者显然,后者不妨反证法:

      • 首先注意到每条有流量路径上有且仅有一条边在最小割内,如果无则有流量,如果 >1 则删去更小。

      • 对于一条有流量路径,其一定是前缀被标记。不妨假设其不是前缀被标记,由其有流量可知每条边的反边都有容量,于是较后的标记点会把较前的未标记点标记,矛盾,故一定是前缀被标记。

      • 如果某条边的 f(s,t) 变化,则说明其一定和删去边共有流量路径;而上面的只标记前缀告诉我们,这条路径上的标记-无标记边一定只有一条,换言之只会有一条在我们认为的最小割中,矛盾,故 f(s,t) 一定不变。

      • 那么这样删下来,得到的恰为选中边的 f,又它们都是满流边且 f 不变,故 f=c,又由割的定义,我们这样一条一条删一定有 f=f(S,T)f 是那条边被删去时它的流量),于是 c=f(S,T),原命题得证。

    • 另外,由于 Dinic 中我们会 bfs 判增广路存在性,不存在则返回最大流量,所以其实这个 bfs 做过了,直接用 Dinic 的 bfs 的结果就好。

  • 注意:“最小割在数值上与最大流相等,但在本身性质上与最大流无任何关系。”不要落入最大流的窠臼!

例题

P1345 [USACO5.4] 奶牛的电信 Telecowmunication}

  • 题意:

    • 给定一张 nm 边的无向图。

    • 定义“删去一个点”为将一个点及与其相连的所有边删去。

    • 问令 s,t 不连通至少要删去多少个点。

  • 数据范围:n100,m600

  • 这是一道非常棒的最小割入门题。

  • 我们看到,正常的网络是要删边,这里却是要删点。局面顿时复杂不少。

  • 我会拆点!把无向边拆成有向边,把每个点拆成 inv,outvinv 接受所有入边,然后连一条出边到 outvoutv 发出所有出边。

  • 不错。可是我们要怎么做才能确保一定不会删到 invoutv 以外的其他正常边?

  • 这就到流量发威的时候了。令原有边的容量为 inf,虚边的容量为 1。问题解决。

  • 最后边数大概在 2m+n,总复杂度还是 O(n2m)

P1361 小M的作物

  • 题意:

    • n 种作物,第 i 种种在田地 A 中收益 ai,种在 B 中收益 bi

    • 另有 m 种组合,如果第 i 个组合中的作物共同种在 AB,则有 ca,icb,i 的额外收益。

    • 求最大总收益。

  • 数据范围:n103,m103

  • 首先很容易想到把每个作物开一个点,把 A 作为 SB 作为 T,自 A 向每个作物连容量为 ai 的边,自每个作物向 B 连容量为 bi 的边。

  • 可是,组合怎么办?考虑先对每个组合建一个点,然后和上面一样地连边,毕竟互相矛盾。

  • 接下来,A 一侧的组合和所有组合中作物连向 B 的边矛盾...所以从组合点向所有作物连容量为 inf 的边。

  • 于是构成了 A组合很多作物B 的路径,要么放弃 A组合 的容量,要么放弃 很多作物B 容量。

  • 可是难道...也从所有作物向组合连边?不对。得把组合开两个虚点,分别处理。

    • 解释一下原因,毕竟我在这里挂了一次:

    • 这样做就会出现 inf 权环,考虑 S1,2,T1,24,41,2 的情况,其中 4 为组合的虚点。

    • 于是此时存在一条路径 S142TS12T 矛盾了,和我们的需求不符。

  • 这里因为网络流要建反边所以会有重边,但是网络流重边不敏感。

  • 于是 veEc(e) 即为答案。

  • 谈一下复杂度:建完图之后点数上界 3×103+2,边数上界 2×106+4×103,乍一看网络流复杂度是一定炸掉的。

  • 但是这里图只有两层,Dinic 几乎没有外层复杂度。虽然内层的 O(nm) 也趋于 4×109,看起来毫无希望,但事实上边数那么多的话图就极其稠密,已经趋于 n2 了。

  • 那么显然我们可以期望 Dinic 发挥出它强大的 Ω(m)O(nm) 的力量,横竖没有 Θ 就算成功!

P1344 [USACO4.4] 追查坏牛奶 Pollutant Control

  • 题意略。

  • 第一问无疑是个最小割板子,第二问怎么办?

  • 某,有一奇技淫巧:把每条边的容量 +eps,这里 eps<1m

  • 于是求出的最小割的整数部分应该不变,小数部分事实上反映了割了几条,且会尽量少割。最大流那边只是数值相等,不用关心图论意义。

  • 唔...事实上,是可行的。而且建议乘一个足够大的数转到整型范围。

P2057 [SHOI2007] 善意的投票 / [JLOI2010] 冠军调查

  • 题意略。

  • 首先容易看出是最小割。

  • 本题的建模比较有趣,我们详细谈谈:

    • S 代表睡觉。从 S 向所有想睡觉的小朋友连边。

    • T 代表不睡觉。从所有不想睡觉的小朋友向 T 连边。

    • 对于每一对朋友....朋友怎么连边?

  • 不妨先处理分居左右(认为 S 在左)的朋友对 (x,y)。显然应该只需要从左向右连边(从右向左连的边,最大流中就应当是没用的,最小割下也没有实际意义),考察其实际意义:

    • Sx 的边:x 改主意了,不睡觉。但是要付出他违背自己意愿的代价。

    • xy 的边:硬吃这一对朋友选择不同的代价。

    • yT 的边:y 改主意了。

  • 那问题来了。同一边的朋友怎么办?不用连边?

  • 不行,残量网络是一个动态的东西。考虑 (x,y) 都在左边的情况,可能割了某条 Sx 之后 x 等效在右边,于是此时 Syx?T 构成矛盾。

  • 所以这不是二分图,同部点之间有边。必须连双向边。当然,跨部边事实上可以单向(但没必要)。

  • 复杂度 O(n2(n+m))

P2598 [ZJOI2009] 狼和羊的故事

  • 题意略。知道这是网络流的话不太难,没猜到是网络流就寄了,我是在题单里做到的那种,所以真被 shock 一下我估计我也做不出来...

  • S1(+),2T(+),四连通(1)。然后求最小割。

  • 一个比较有趣的问题是,为什么这样的篱笆一定是连续的。

  • 感性理解的话证明不难:有豁口的话一定还有 ST 的路径。

  • 或者说,这个网络和原图的连通性是等效的。

P2774 方格取数问题

  • 题意略。一看就很最小割啊。

  • 相邻两个数至少有一个不选...考虑把每个点拆成 in 和 out。

  • i,和所有四连通的 jouti>inj(+)

  • S>out,in>T(a?)...好像有问题,考虑 1×2 的一个网格,建出来图发现它会割两条边。可能会各割一次或者把某个割两次。

  • 黑白染色。黑点和 S 连,白点和 T 连(边权为 ai);黑连向白(+)。

  • 啊于是这样一来拆点也没有必要了。O((n2)2(n2))=O(n6),不过网络流复杂度大家都知道。

P2762 太空飞行计划问题

  • 题意略。妙妙题!至少对现在(写到这里时)的我来说!

  • 输入数据确实毒,我的想法是 getline 进来在上面跑 mygc。不过这个不重要。

  • 首先费用流的话,有点怪,因为不知道流量是干嘛的;最大流也有点怪,负流量是什么鬼;最小割?没道理啊。

  • 我有一个想法:跑费用流。流量代表做几个实验,依次把从 S 流出的流量设为 1m,挨个试一试,当然实际上是在残量网络上加流量。

  • 但是,怎么表示仪器的存在性,或者说实验对其存在性的依赖?...好像没办法。

  • 贺讨论区后想到了一种非常妙(可能只是因为我最小割做得少)的建模:用边表示不买某个仪器,而非买某个仪器!

  • Seq(cost),eqex(+),exT(value),这里 eq 表示 equipment,ex 表示 experiment,中间的那种边只有有依赖关系的才连。

  • 于是得解。构造参看最小割最大流定理的构造证明。

  • 另外本题的建模有更一般化的做法并可以引出一系列问题,参看《最小割模型在信息学竞赛中的应用》-胡伯涛。

P4174 [NOI2006] 最大获利

  • 题意略。可以看出和上一道题基本同构。

  • 首先令 ans=cost,相当于建出所有基站;然后从源点向基站连边,流量为不建它能省的钱;从用户群向汇点连边,容量为其对应的获益;基站到用户群之间的边保留,容量为正无穷。

  • 复杂度 O((n+m)2(n+3m))=O(m3),唉算了你管它干啥。

P3355 骑士共存问题

  • 题意略。二分图最大独立集板子,和方格取数没啥区别。略。

某 T1 割

P5934 [清华集训2012] 最小生成树

  • 题意:给出一张无向连通图,求至少删多少条边后给定的一条边既可以在最小生成树中,又可以在最大生成树中。

  • 数据范围:n2×104,m2×105

  • 首先,基于 Kruskal 算法,边权为 K 的边在最小/大生成树中,就代表着仅保留 <K/>K 的边时原图不连通。

  • 故分别建图跑最小割,源汇点分别为给定边的源汇点(因为给定边必须对连通有贡献),将两个最小割求和即可。之所以是求和是因为两张图的边集无交。

  • 时间复杂度...就,理论 O(n2m) 呗。我也不知道这么大的数据范围怎么敢出的。upd:由 OI Wiki,在单位网络上增广轮数为 min(V23,E12,于是纸面复杂度 1.47×108,能过是有道理的。

P5039 [SHOI2010] 最小生成树

  • 题意:给出一张无向连通图,可以花费 1 的代价将某条边的边权 +1,求使给定边一定在最小生成树中的最小代价。

  • 数据范围:n5×102,m8×102

  • 沿用上一题的结论。发现边权差不太好处理,思考发现割它的代价即为它的容量,于是令容量为边权差即可。解决,复杂度 O(n2m)

posted @   未欣  阅读(152)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示