-NetFork Wlow

nodgd 如是说

单位容量图上最大流的复杂度是 \(O(m\min(m^{0.5},n^{0,67}))\)

\(O(nm)\) 次增广。

  1. \(dis_u\) 递增。
  2. 每条边至多成为 \(\frac{n}{2}\) 次增广路上的最小边。

Dinic(第琳刻)。

ISAP(唉撒普)。

Dinic v.s. ISAP 谁能赢?

Dinic 不加当前弧,就会炸。

ISAP 要加 GAP。

HLPP。感性理解一下。MPM 是 \(O(n^3)\) 的。
预留推进算法,存了一些水。慢慢流出去。
HLPP 复杂度 \(O(n^2\sqrt m)\)。但是比较稳定,大多数情况下跑不过 Dinic 和 ISAP。都没有食用价值。
无向边,环边 \(\max-\min\),最大。枚举 \(\max\)\(\min\) 边,它们需要在一个里。然后,跑一个最大流上限为 \(2\) 的最大流。EK 线性,Dinic 线性,ISAP 炸飞了。这也太垃圾了。比较无脑。

费用流,伪多项式,将就用。\(O(nmf)\)。其实这个问题可以归约到线性规划问题,旅行商问题,背包问题,3-SAT 问题和哈哈哈哈问题。多路增广。多路增广。多路增广。多路增广。多路增广。zkw 就是这么写的。

原始对偶费用流。hyx 论文。对什么偶???

zkw 费用流,有点扯。看了假的 zkw。Duel-Duel-While-While。

喜闻乐见的上下界。

东方文花帖。\([d,u]\)\(d,u\) 都可以小于 \(0\)

文文可以消弹。有没有解?

感觉文花帖游戏性没有弹幕天邪鬼强。不过毕竟文花帖出得早一点。

如果每条边单独考虑的话,会直观很多。超级源点出边流量等于超级汇点入边流量也比较显然。

第一部分 \(Flow1\)。第二部分 \(Flow2\)

nodgd 助眠。nodgd 煮面。

最小割树。Stoer-Wagner。假设法。假设法。假设法。假设法。假设法。全局最小割。全局最小割。全小。分治。分治全小。理想最小割树。HJJ。左右。对的??感性理解。

int mian。

Just_int_mian。

切糕。。。切糕。。。切糕。。。切糕。。。切糕。。。切糕。。。切糕。。。切糕。。。

高条过。爆爆爆。\(+\infty\)

保序回归。保序回归。保序回归。保序回归。保序回归。\(w_1\sim w_m\),变化吧!变成 \(y_1\sim y_m\)。有很多 \(i,j\)\(y_i\leq y_j\),最小化 \(\sum\limits |w_i-y_i|\)。纠缠纠缠纠缠纠缠纠缠。

线性规划对偶

我已经完全放弃证明了。

想要将一个线性规划问题对偶,大致方法如下。(以最小化问题 \(P\) 为例。)

  1. 我们得知,\(P\) 的对偶问题应当是最大化问题 \(D\)
  2. 将形如 \(x_i\leq 0,x_i\geq 0\) 的限制单独拿出来,设问题 \(P\) 中有 \(n\) 个变量,还剩 \(m\) 个限制,那么问题 \(D\) 中有 \(m\) 个变量,\(n\) 个限制。
  3. 若将问题 \(P\) 中限制右边的常量列成一个向量 \(A\),那么问题 \(D\) 所求应当是 \(\max\sum{A_iy_i}\)。若将问题 \(P\) 中所求值中变量所带系数列成一个向量 \(B\),那么问题 \(D\) 的第 \(i\) 个限制右边的常量应当是 \(B_i\)
  4. \(P\) 中存在 \(x_i\geq 0\),那么 \(D\) 中第 \(i\) 个限制所用符号应当是 \(\geq\)。若 \(P\) 中存在 \(x_i\leq 0\),那么 \(D\) 中第 \(i\) 个限制所用符号应当是 \(\leq\)。若 \(P\) 中不存在关于 \(x_i\) 的被我们拿出来的限制,那么 \(D\) 中第 \(i\) 个限制所用符号应当是 \(=\)
  5. \(P\) 中第 \(i\) 个限制所用符号是 \(\geq\),那么 \(D\) 中应该加上限制 \(y_i\geq 0\)。若 \(P\) 中第 \(i\) 个限制所用符号是 \(\leq\),那么 \(D\) 中应该加上限制 \(y_i\leq 0\)。若 \(P\) 中第 \(i\) 个限制所用符号是 \(=\),那么 \(D\) 中没有形如 \(y_i\leq 0,y_i\geq 0\) 的限制。
  6. \(P\) 中含 \(m\) 个限制的不等式系数矩阵 \(C\) 转置,得到 \(D\) 的含 \(n\) 个限制的不等式系数矩阵 \(C^T\)

这是非常酷炫的。随便看一道题目。

\(\max 5x_1+6x_2\)
有限制

\[\left\{\begin{matrix}x_1+2x_2\leq 20 \\3x_1+x_2\geq 15 \\x_1-x_2=5 \end{matrix}\right.\]

\[x_1\geq 0 \]

如果你理解了,就能得到其对偶问题:

\(\min 20y_1+15y_2+5y_3\)
有限制

\[\left\{\begin{matrix}y_1+3y_2+y_3\geq5 \\2y_1+y_2-y_3=6 \end{matrix}\right.\]

\[y_1\leq 0,y_2\geq 0 \]

我知道了。从最小化问题到最大化问题的变化和最大化问题到最小化问题的变化是不一样的。而且我还先入为主,理所当然了。所以上面说的是错的。所以不要看。

这个东西对我们解决网络流问题有什么帮助呢?
我们必须认识到一个残酷的事实。
就是说,我们把一个问题对偶了,得到另一个问题。这有什么用呢?
好像并没有什么用。除非我们能把它变成 \((8)\) 的形式。
这很重要。所以我们来看论文吧。

论文是在做一件什么事情呢?橘雪莉。
\(f_{u,v}\) 表示 \((u,v)\) 这条边的流量,\(c_{u,v}\) 表示 \((u,v)\) 这条边的容量,\(w_{u,v}\) 表示 \((u,v)\) 这条边的代价,\(b_u\)\(u\) 点的流量需求(这里指的是 \(u\) 流出的流量减去 \(u\) 流入的流量)。那么我们可以用普通的最小费用流求出 \(\min\sum\limits_{u,v}f_{u,v}w_{u,v}\),其中 \(b_u\) 的限制可以用预分配流量来实现。

发现这个问题也可以被写成一个线性规划问题,然后直接对偶一下得到一个形式:

\[\min \sum\limits_{u}b_up_u+\sum\limits_{u,v}c_{u,v} \max(0,p_v-p_u-w_{u,v}) \]

这就是上文所说 \((8)\) 的形式。
其中,\(p_u\) 是我们需要规划的量,其它东西都是常量。

得到 \((8)\) 过后,应该怎么解决一个看起来不像费用流的问题?如果我们能把这个问题规约到形式 \((8)\),那么就可以一路反推回最小费用流。可能这还是非常抽象,所以我们来看看例题吧。

防守战线

\(p_i\) 表示前 \(i\) 个位置共建了 \(p_i\) 座塔。此时,我们需要最小化 \(\sum\limits_{i=1}^n (p_i-p_{i-1})C_i\)\(p_0=0\)。拆一下系数,发现它是 \(\sum\limits_{i=1}^n p_i(C_i-C_{i+1})\)。发现这个东西非常像形式 \((8)\) 的前一项!

当然,还有几个限制需要处理。

\[\left\{\begin{matrix}p_{i+1}-p_i\geq 0 \\p_{R_j}-p_{L_j-1}\geq D_j \end{matrix}\right.\]

我们可以这样想:如果不满足这些限制,就让答案变成 \(+\infty\)。于是,可以让有限制的 \((u,v)\) 对的 \(c_{u,v}\) 变成 \(+\infty\),然后如果有 \(p_u-p_v\geq D\) 的限制,它就等价于 \(p_v-p_u\leq -D\),所以可以让 \(w_{u,v}=-D\)。这样的话,就相当于给形式 \((8)\) 添加了一项 \(+\infty \max(0,p_v-p_u+D)\)。显然,若 \(p_u-p_v < D\),那么此时 \(p_v-p_u > -D\),所以 \(p_v-p_u+D>0\),然后乘上一个 \(+\infty\) 就炸了。也就是说,我们通过形式 \((8)\) 可以实现这些限制。于是这个问题就可以完全使用形式 \((8)\) 解决。

保序回归(Isotonic Regression)

现在,给定一个长度为 \(n\) 的序列 \(A\)。要求构造一个长度为 \(n\) 的序列 \(B\),使得 \(\sum c_i|A_i-B_i|\) 最小。并且有 \(m\) 对偏序关系限制,每对形如 \(B_{x_i}>B_{y_i}\),构造出来的 \(B\) 必须满足所有偏序关系限制。问这个最小值是多少。

观察,发现 \(\{B_i,i\in[1,n]\}\subset \{{A_i,i\in[1,n]}\}\) 必定成立。这重要吗?再观察,发现 \(\{B_i,i\in[1,n]\}\subset Z\) 必定成立。这重要吗?

写不下去了。反正能做。

A - 分组作业

去掉合作的部分是简单的。
如何表达都愿意之后的可能合作呢?这似乎存在着多种决策,不能用二元的最小割表示。
对于第 \(i\) 组,建立虚点 \(x\),指向 \(2i-1\)\(2i\),边权为 \(+\infty\)。非常登峰造极的一步操作,一旦存在一条边连向 \(x\),那么不合作就可以看成是割掉这条边。因为如果有人不愿意,那么他和汇点一定连通,此时这条边会被割掉。如果两人都愿意,这条边是否被割掉是有选择的。
知道了这个过后,之后的事情就迎刃而解了。

G - Pairing Wizards

想出做法被组员喷了。
启示:如果一个东西二分图能做,它可能真的是二分图。

F - Snuke the Phantom Thief

一维的我都不会。
什么抽象题。

一维怎么做?直接对着原条件建模是做不了的。因为原条件方向完全相反。
所有的 \(\leq a\) 的有 \(\leq b\) 个过于难绷。一旦我们知道了选了 \(k\) 个宝石,那么它可以变成存在 \(\geq k-b\)\(>a\) 的。把所有限制变成存在性限制,原问题就变成了构造一个宝石集合满足所有条件。随便分析一下就知道,最优的情况肯定是每个条件都是最大的几个大于多少,最小的几个小于多少之类的,于是可以得到按坐标排序后的每个宝石的坐标区间,直接匹配就行了。二维也照做。注意到,我并不需要它坐标真的严格递增,也不需要横坐标第 \(i\) 大和纵坐标第 \(j\) 大匹配之类的。总而言之就是 \(n\) 遍最大流做完了。

三维好像就做不了了,令人感慨。

C - 志愿者招募

显然,这是一道经典老题。
虽然不太想在文章里写,但想了想,还是决定写一下。
生活中,人们经常不可避免地遇到自己所逃避的事物。想要过所谓“万事如意”的生活其实是相当困难的。我们必须对此有所准备。在无限多的志愿者中,我们只会选择有限个人,那么每个人被选择到的概率都是 \(0\)。不过这也没什么大不了的,因为本来在这种事件上讨论概率也没有什么意义。因为每个人被选到的概率都是 \(0\),所以期望选择人数也应当是 \(0\) 人。如果主办方一开始就说要选择 \(0\) 人,那么事情就会简单很多。
我们发现一个人能志愿工作的时间是一段区间,区间总是好的。于是将天数建成一条链。如果让一个人作为一个流量流过一段时间其实非常困难。于是我们反其道而行之,尝试让一个人作为一个流量不去流过一段时间。然后发现就做完了。一条链,每条边容量都是 \(\inf\)。如果第 \(i\) 天要 \(a_i\) 人,让它的容量变成 \(\inf-a_i\)。然后第 \(i\) 种志愿者,连一条边覆盖链上的 \([s_i,t_i]\),容量为 \(\inf\),费用为 \(c_i\)。这样,每条天数边至少有 \(a_i\) 流量跨过。当一个流量跨过一天,说明它对应着一个志愿者在这一天里工作。

H - Sum of Abs

这题非常困难。这个绝对值非常难拆,只有当我们确定某个连通块的正负性时,我们才能知道其中每个点的贡献是正还是负。

假设 \(b_u>0\),我们进行讨论:

  • 若删除点 \(u\),贡献为 \(-a_u\)
  • 若点 \(u\) 在正连通块中,贡献为 \(b_u\)
  • 若点 \(u\) 在负连通块中,贡献为 \(-b_u\)

似乎这可以使用切糕模型。因为显然,极大连通块限制的意思就是说,相邻两个点如果不被删除,那么它们被分配到的集合就必须相同,这个可以用最小割限制。而且,这里唯一可能出现的错误是把一个正连通块看成负连通块,把一个负连通块看成正连通块,不过显然,错解一定不优。于是貌似就真的能做。

注意到两个问题:一是贡献有负的,不能直接作为流量;二是我们要的是最大贡献。于是我们可以直接先调到最优状态再求最小减量。然后就做完了。

不过我感觉这个做法有点问题。而且我不会证明正确性。因为它万一同时删了两条边怎么办???
总感觉会分析出这样的问题。

刚刚咨询了一下,发现让切糕变得绝对不会割多条边有几种方法:

1.连容量为 \(+\infty\) 的反向边。
2.给每条边加上一个 \(inf1\) 的容量,而本来的 \(+\infty\) 边用一个更大的 \(inf2\)。这样就能保证在割的边最少的前提下割的和最小。这个前提就保证了每条链绝对不会割多条边。

I - Grid Coloring 2 gniroloC dirG

键山雏。

J - Blood Pressure Game

长度为 \(n\) 的数组 \(A\),长度为 \(m\) 的数组 \(B\)\(B\) 前缀求出插入到 \(A\) 中后(一个空位最多插入一个元素),最大化 \(\sum|A'_i-A'_{i+1}|\)

K - Goods transportation

琪斯美。

L - Special Edges

W E L L D O N E.

直接最大流看起来很困难。考虑使用最大流最小割定理。
\(E_1\) 为关键边集合,对于每一个 \(E_2\subset E_1\),可以算出钦定割掉 \(E_2\) 而不割掉 \(E_1-E_2\) 时的最小割。设这个东西的答案存在 \(pre\) 里。于是对于每一个询问,我们可以算出 \(\min_{S} pre_S+w(S)\),这个显然就是答案。相当于枚举了所有割关键边的情况,然后拆贡献计算。

这个具体怎么算呢?就是把 \(E_2\) 里的边全部删掉,\(E_1-E_2\) 里的边都设成 \(+\infty\),然后求最小割。因为 \(w\leq 25\),所以这个 \(+\infty\) 也可以只有 \(25\)。如果我们不想要割掉它,但是它却被割掉了,那么答案增加 \(25\),肯定不如我们真正想要割掉它时的方案优(直接真正割掉它的方案里它的贡献必定 \(\leq 25\)),于是使用错解一定不优思想,这样就是对的。时间复杂度 \(O(q2^k+2^k\text{maxflow}(n,m))\)。过不去。

非常酷的事情:使用 CSP-S 2025 T2 思想,每次加边。加边使用 Ford-Fulkerson,每次暴力找一条增广路增广,只会增广 \(w\) 轮(是在之前的残量网络上增广),于是复杂度 \(O(w(n+m))\)。总时间复杂度 \(O(q2^k+2^kw(n+m))\),可以最开始做一遍 Dinic 最大流。能过。

我错了,我不该投票的。

posted @ 2026-01-12 14:40  Just_int_mian  阅读(161)  评论(6)    收藏  举报