网络流之最小割最大流

此类建模基本方针

首先网络流证明就略过了,先说一下如何建模。

首先有个建图基本方针是,把所有点分成两个集合后,再来考虑需要如何连边。

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\) 边。

这种并联的连接方式,会导致此图非常符合限制。

posted @ 2024-12-19 22:23  Otue  阅读(47)  评论(0)    收藏  举报