网络流之最小割最大流
此类建模基本方针
首先网络流证明就略过了,先说一下如何建模。
首先有个建图基本方针是,把所有点分成两个集合后,再来考虑需要如何连边。
P2774
在一个 \(m\) 行 \(n\) 列的方格图中,每个方格都有一个正整数。任务是从方格中取数,要保证任意两个数所在方格无公共边,且取出数的总和最大,求此最大和。
思路
解决此问题,先考虑集合划分。因相邻方格互斥,把 \(i + j\) 为偶数的 \((i, j)\) 放左边, \(i + j\) 为奇数的放右边。
假设先全选所有数,现在要删最少的数来满足条件。为此构造一个模型,需满足:
- 能删掉一个元素,即不取对应方格。
- 删掉的代价为方格权值。
- 要么删数策略始终最优,要么能反悔。
- 最终达到无互斥方格状态。
通过构建网络流图跑最小割解决。建图如下:
- 从源点 \(S\) 向 \(i + j\) 为偶数的 \((i, j)\) 连权值为 \(a_{i,j}\) 的边。
- \(i + j\) 为奇数的 \((i, j)\) 向汇点 \(T\) 连权值为 \(a_{i,j}\) 的边。
- 相邻方格 \((i, j)\) 与 \((x, y)\) 连权值为 \(+\infty\) 的边。
分析建图合理性:
- 若不选某方格,等价于割掉 \(S\) 到该方格或该方格到 \(T\) 的边。
- 因相邻方格间边权为 \(+\infty\) 不会被删,要使图不连通只能割两边的边。
此建图方式在很多题中常用。
网络战争
给出带权无向图 \(G=(V, E)\),求将点 \(s\) 和点 \(t\) 分开的边割集 \(C\) ,使该割集平均边权最小。
思路
采用二分法求解。因为 \(mid\) 越小答案越大,先将所有边权减去 \(mid\) 求最小割。若最小割答案小于 \(0\) ,则调整右端点 \(r = mid\) ;否则调整左端点 \(l = mid\) 。
本题有负权边,求最小割时遇到负权边直接选。
最优标号
给定无向图 \(G=(V, E)\) ,每个顶点有标号,在 \([0, 2^{31}-1]\) 内。对边 \((u, v)\),费用 \(\mathrm{cost}(u, v)\) 为 \(u\) 与 \(v\) 标号异或值。已知部分顶点标号,要确定余下顶点标号使所有边费用和最小。
思路
思路是确定答案每一位后累加。这样图边权转化为 \(0\) 或 \(1\) 。因只有 \(0\) 和 \(1\) 连边有贡献,所以要把 \(0\) 和 \(1\) 划分到不同集合。
当两类集合点确定后,费用和最小值等于两集合间边数量最小值,即割。
若有些点初始有编号,若标号为 \(0\) ,则从源点向其连容量为 \(+\infty\) 的边,保证其与源点在同一集合,不会与汇点在同一集合,反之同理。
最后所有边 \((u, v)\) 连边权为 \(1\) 的边,求最小割可得到两个集合之间边的数量最小值,即 \((0, 1)\) 边的数量,也就是产生贡献边的数量。代码如下:
_for(j, 1, m) {
add_edge(edm[j].u, edm[j].v, 1); add_edge(edm[j].v, edm[j].u, 0);
add_edge(edm[j].v, edm[j].u, 1); add_edge(edm[j].u, edm[j].v, 0);
}
S = n + 1;
T = n + 2;
_for(j, 1, n) {
if (p[j]!= -1) {
if (p[j] >> i & 1) add_edge(S, j, INF), add_edge(j, S, 0);
else add_edge(j, T, INF), add_edge(T, j, 0);
}
}
res += (dinic() << i);
有线电视网络
给定 \(n\) 个点 \(m\) 条边的无向图,求最少去掉多少个点使图不连通。
思路
因图不连通则存在两点 \(u, v\) 不联通,所以枚举源点 \(S\) 和汇点 \(T\) 。
此问题与网络最小割类似,最小割割边,本题割点。则需要特殊构造:
构造网络方法如下:
- 把原无向图每个点 \(x\) 拆成 \(x\) 和 \(x' = x + N\) 。
- 对任意中间点 \(x\) ,连有向边 \((x, x')\) ,容量为 \(1\) 。
- 原无向图每条边 \((x, y)\),在网络中连有向边 \((x', y)\),\((y', x)\) ,容量为正无穷。
解释:
- 若断掉 \((x, x')\) 边,则不能从 \(x\) 进从 \(x'\) 出,实现删点效果。
- 因只能删无向图节点不能删边,所以网络其他边容量设为正无穷。最小割不会包含这些边,因去掉容量为 \(1\) 的边就足以使 \(S\) 和 \(T\) 不连通。
此构造满足题目限制条件。
小 M 的作物
大概意思是:选择一个组合中所有的物品,才可以获得价值 \(c_i\)。
这个属于网络流建图模板了:
- 如果当前组合需要放入 \(S\) 集合:建立一个虚点 \(V_0\),\(S\) 连 \(V_0\) 一条边权为 \(c_i\) 的边。虚点 \(V_0\) 对组合中所有物品连一条 \(+\infty\) 边。
- 如果当前组合需要放入 \(T\) 集合:建立一个虚点 \(V_0\),\(V_0\) 连 \(T\) 一条边权为 \(c_i\) 的边。组合中所有物品对虚点 \(V_0\) 连一条 \(+\infty\) 边。
这种并联的连接方式,会导致此图非常符合限制。

浙公网安备 33010602011771号