网络流做题笔记
P3227 [HNOI2013] 切糕
考虑最小割。
对于一个坐标上的点只能选择一个 \(z\) 坐标,将 \(z\) 坐标的费用作为流量顺次连接。
第二个限制条件,先去绝对值,枚举较大值。
再限制较小值,不能小于 \(z-D\),从 \((x,y,z)\) 向 \((x',y',z-D)\) 连 \(inf\) 即可。
方格取数问题
相邻节点之间都有限制,一对限制取两点最小值,跑最小割即可。
将网格线规定限制方向,使每个点只连向源点或汇点,黑白染色即可。
最长k可重线段集问题
与最长 \(k\) 可重区间集问题相似,不同之处是 \(l=r\) 的情况。
考虑不能有自环,处理一个自己连向自己的边,将一个数轴上的点拆为入点和出点即可。
最长不下降子序列问题
思路:看到最长,考虑费用流,魔改只有跑出来最长路时累加答案,过了。
考虑最大流做法,先 \(O(n^2)dp\) 将 \(f_i=1\) 的点与源点连边,\(f_i=\max_j{f_j}\) 的点与汇点连边。
两点之间满足 \(f_i+1=f_j\) 且 \(a_i\le a_j\) 连边。
点有次数限制,拆点即可。
[THUPC 2025 初赛] 检查站
点有流量限制,拆成入点和出点,出点向入点连边,限制点的流量。
考虑将 \(u\) 连检查站的入点,\(v\) 连检查站的出点,使 \(u\) 到 \(v\) 一定要断掉检查站的边。
为什么不能随意选检查站:可能有两对互不连通的点交在一个检查站上联通。
[SCOI2007] 修车
考虑到每个人修的车数不同时等待时间不同,将每个点拆成 \(n\) 个不同的点,表示状态,分别考虑费用即可。
最小割
设一个图可以支付一定边权将一条边删除。
\(s\) 到 \(t\) 的最小割为将 \(s\) 和 \(t\) 划分成不联通的两个集合 \(S\) 和 \(T\) 的最小代价。
有最小割的 二选一 模型,设 \(0/1\) 变量 \(x_i\) 表示第 \(i\) 个元素选 / 不选。
求 \(\min{(\sum\limits_{i} a_i x_i + \sum\limits_{i} b_i \bar{x_i} + \sum\limits_{i,j}(c_{i,j} x_i \bar{x_j}))}\)(\(a_i,b_i,c_{i,j} \ge 0\))。
设 \(i\) 与 \(s\) 相连表示选此元素。
\(s\) 向 \(i\) 连 \(a_i\) 流量,割掉这条边表示不选 \(i\)。
\(i\) 向 \(t\) 连 \(b_i\) 流量,割掉这条边表示选 \(i\)。
\(i\) 向 \(j\) 连 \(c_{i,j}\) 流量,割掉这条边表示选 \(i\) 且不选 \(j\)。
最后减去图的最大流即可。
关于处理 $ - x_i x_j$。
可以转化为对应形式。
疑似不能解决 \(x_i x_j\) 形式的代价。
[CEOI 2008] order
最小化费用,经典最小割。
最小割割掉哪一层相当于支付那一层的代价,每一条链只会支付其中一个代价。
将买的花费,租的花费,不做工作的花费,分别建三层即可。
文理分科
我们要处理 \(\max{( \sum\limits_{i} (a_i x_i + b_i \bar{x_i}) + \sum\limits_{i}c_i \prod\limits_{x \in X_i}x_i + \sum\limits_{i}d_i \prod\limits_{x \in Y_i}\bar{x_i} )}\) 。
发现网络流类问题 与 不好做,转化为 或。
设 \(i\) 与 \(s\) 相连表示选此元素。
下面只讨论 \(\sum\limits_{i}c_i \prod\limits_{x \in X_i}x_i\) 的处理方法。
新建一个点 \(p\) 表示该限制。
集合 \(X_i\) 任意元素划分到 \(T\) 均不合法,将 \(p\) 向集合 \(X_i\) 中的每个元素连一条大小为 \(inf\) 的边。
还可以不选集合 \(X_i\) 的贡献,\(s\) 向 \(p\) 连 \(c_i\) 流量。
Two Permutations
每个排列有两种选择(重排 / 不重排),一定的是,一个置换环上的点一定是同一种选择。
考虑将每个置换环看作一个点,每个点有两种选择,经典 二选一 类最小割。
分类讨论下标 \(i\) 的贡献。
设 \(f_i,g_i\) 表示是否重排排列 \(P,Q\)。
- \(x_i = y_i = i\),一定会有 \(1\) 的花费。
- \(x_i = y_i \neq i\),\(f_i g_i\) 和 \(\bar{f_i} \bar{g_i}\) 都有 \(1\) 的花费。
- \(x_i \neq y_i , x_i = i\),\(g_i\) 会有 \(1\) 的花费。
- \(x_i \neq y_i , y_i = i\),\(f_i\) 会有 \(1\) 的花费。
- \(x_i \neq y_i , y_i \neq i , x_i \neq i\),\(f_i g_i\) 会有 \(1\) 的花费。
发现有上文无法解决的 \(f_i g_j\) 形式的代价。
观察性质,发现为两个 独立的 集合可以通过 反转 第二个集合定义,将式子改为 \(f_i \bar{g_i}\) 的形式。
此时 \(P_i\) 与 \(s\) 相连表示选 \(P_i\),相反的 \(Q_i\) 与 \(s\) 相连表示不选 \(Q_i\)。
直接使用上述模板即可。