网络流。
问题本质
最小割本质上是一个 整数规划问题。
问题的最终目标就是最小化:
表示选 的代价, 表示 是否在 这边。
最大权闭合子图
给一个有向图,每个点有可正可负点权,要求选一个点的子集,点权和最大。有一些限制 表示 选了则 必须选。
首先,正的选了有代价,负的不选有代价。然后限制中的有无穷代价。
常见技巧&模型
-
无穷的边强制连接。
-
把一边的变量取反。
-
拆点常见用途:
- 限制边权。
- 表示不同状态,方便获取。
-
对于多选一的问题,可以用一条链,限制只能割一个点。
-
绞尽脑汁定义变量,例如 。
-
选了有收获有代价的问题,收获连 S,代价连后面的。
-
方格特殊性质:可以弄成二分图,然后白点的变量表示是取了,黑点的表示是没取。
-
对于抽象点的问题纸上乱画画。。。
例题
P8215 [THUPC 2022 初赛] 分组作业
P8215 [THUPC 2022 初赛] 分组作业。 这道题的变量:是否选择愿意,是否选择合作。
-
不愿意 不合作,无穷的边。
-
A 不合作 B 且愿意 有 的代价。
-
A 不愿意且 B 合作 有 的代价。
-
愿意和队友不愿意 有 的代价。
P14832 [THUPC 2026 初赛] Unpair Ampere
P14832 [THUPC 2026 初赛] Unpair Ampere。
连边技巧:看如果怎么样,就一定会怎么样,充分条件有什么。
技巧:为了防止多割,割的代价加上一个大常数,最后再减掉。
设置必须变量->设置被动变量->有必要的时候对变量取反
首先想到的定义变量时发电厂是否转换。
我们发现这样做不了,因为不知道每个节点是否被火力/太阳能连接。
所以我们设置一个被动的变量,表示这个节点是否被火力/太阳能连接。
但是...这样好像有问题,同时被火力和太阳能连接不符合 。
所以我们尝试反转太阳能节点。
还有就是“可能存在一些设施直接或间接地同时连接到”,所以我们需要保证贡献传播。
然后源点也要反转。源点我们时进行了拆点的。
定义不被太阳能连接时 。 表示源点不反转。
-
, 如果被火力连接, 也必须,所以 。
-
, 不不被火力连接, 也要不不被火力连接,所以 。
-
就是不反转所以 一定被火力连接,。
-
不是不反转所以 一定被太阳能连接,。
-
被火力连接且不不被太阳能连接,就要花 ,。
为了防止一个电厂又是火电又是太阳能,就是两条边都被割掉了,所以我们需要给割边加上一个大常数,最后减去。
P2774 方格取数问题
方格有一个特殊性质,可以弄成二分图。
然后白点的变量表示是取了,黑点的表示是没取。
P6054 [RC-02] 开门大吉
跟 P3227 [HNOI2013] 切糕 差不多。有一个技巧,变量这样定义:。
还是这个图:
| |
|. |
| . |
| . |
| .|
| |
(中间的边方向是从左到右)
要把这两个隔断显然不能从左边的高点和右边的低点个割。
这道题是多选一,就一条链,限制只能割一个点。
思路
就是个缝合。。。为什么非要求一遍期望 。
然后有 表示选手 做第 套题。
-
,边权 。
-
,边权 。
还有神秘剪枝:if(rest>inf)return inf;。
P2762 太空飞行计划问题
思路
首先一些变量是这个仪器选不选。
但是问的是收益最大,我们看看哪些不行。
源点向实验连收益。实验需要向它所需的所有仪器连接 的边。仪器向汇点连价格。
然后怎么输出方案?
我们 dinic 最后一次检查中,会保存每一个点的 ,能到达的就是 S 集。
P5934 [清华集训 2012] 最小生成树
如果当前边可以放在最小生成树上,去除这个边,只保留比它小的,剩下图中 不联通。
思路
其实是性质题。
首先的性质就是如果当前边可以放在最小生成树上,去除这个边,只保留比它小的,剩下图中 不联通。
最大生成树同理。
然后建两棵树, 的和 的,然后分别跑 之间的最小割。
P5039 [SHOI2010] 最小生成树
跟上一道题有点像。
思路
除了那条边全部减就是那条边加。
然后对最后答案的影响就是跟那条指定的边的大小关系。
注意这道题是保证。
P4174 [NOI2006] 最大获利
思路
跟这个 P2762 太空飞行计划问题 很像。
AT_arc176_e [ARC176E] Max Vector
AT_arc176_e [ARC176E] Max Vector。
这道题我们可以通过最后的结果限制过程。
多选一还是用链来表示。
思路
首先把 拆成长度为值域的链, 也是。
然后我们建立虚拟点表示当前限制,每一个 建立一个。我们需要防止 和 都小于 的情况,所以把 Y 反过来,然后链接 上 这个点和 上的。
P12824 [NERC 2021] Kingdom Partition
P12824 [NERC 2021] Kingdom Partition。
代价有两倍,所以要建两条边,拆点实现。(这么逆天?)
思路
然后列出两个表格:
| ST | TS | SS | TT | |
|---|---|---|---|---|
| ST | 2 | 0 | 1 | 1 |
| TS | 0 | 2 | 1 | 1 |
| SS | 1 | 1 | 0 | 2 |
| TT | 1 | 1 | 2 | 0 |
对比题目要求的系数矩阵:
| A | B | C | |
|---|---|---|---|
| A | 2 | 0 | 1 |
| B | 0 | 2 | 1 |
| C | 1 | 1 | 0 |
然后 A-ST B-TS c-SS/TT。
P11531 [THUPC 2025 初赛] 检查站
拆点可以限制每一个点的流量为 。
P14885 [ICPC 2019 Yokohama R] Draw in Straight Lines
P14885 [ICPC 2019 Yokohama R] Draw in Straight Lines。
找到性质->设置变量。
关于 的构造:一条链,一个点连向下一个点 ,然后 指向每个点 ,如果是选取一段的话需要一个 和长度个 。
思路
首先,这道题我们需要找到性质。我们发现一个点肯定是横纵最多一次的。
然后我们考虑最小割,先设置变量:
这个点横着是否被覆盖了黑色,横着是否没有被覆盖白色,竖着是否被覆盖了黑色,竖着是否没有被覆盖白色。
如果是黑色点: 到 和 到 必须连接 的边。 连向 的边需要单点覆盖的权值。
如果是白色点: 和 必须连接 的边。 和 与 和 需要单点覆盖的权值。
然后关于边的话,就 连向每个点,然后有一条横/竖的链,选取一段刚好需要 。