20251231 费用流求解线性规划

记号

\(f(u, v)\) 代表 \((u, v)\) 的流量。
\(cap(u, v)\) 代表 \((u, v)\) 的容量。
\(cost(u, v)\) 代表 \((u, v)\) 单位流量流过的费用。
\(b(u)\) 代表每个点流量差距,表示为流出 - 流入。

费用流线性规划形式

\[\begin{align*} \max\sum\limits_{(u, v)} f(u, v)&cost(u, v)\\ -f(u, v) &\le 0\\ f(u, v) &\le cap(u, v)\\ \sum\limits_{v}f(u, v) - \sum\limits_{v}f(v, u) &= b(u) \end{align*} \]

线性规划对偶

分别为三种约束引入 \(z(u, v), y(u, v), x(u)\) 三种约束变量(对应定义域为 \(\ge 0\), \(\ge 0\), \(\mathbb{R}\)),可以得到:

\[\begin{align*} \min \sum\limits_{u} b(u)x(u) + \sum\limits_{(u, v)} cap(u, v)&y(u, v)\\ x(u) - x(v) + y(u, v) - z(u, v) &\ge cost(u, v) \end{align*} \]

优化参数关系

根据 \(x(u) - x(v) + y(u, v) - z(u, v) \ge cost(u, v)\),可知 \(y(u, v)\ge x(v) - x(u) + cost(u, v) + z(u, v)\)
且在最优化式子中是 \(cap(u, v)y(u, v)\)\(cap(u, v)\ge 0\),所以 \(y(u, v)\) 一定是在 \(\ge 0\) 的情况越小越好,可知 \(y(u, v) = \max(x(v) - x(u) + cost(u, v) + z(u, v), 0)\)

且发现 \(z(u, v)\) 并不在最优化式子中,为了使 \(y(u, v)\) 最小,\(z(u, v)\) 一定为 \(0\)

综上,最后化简可以得到:

\[\max\limits_{u} b(u)x(u) - \sum\limits_{(u, v)}cap(u, v)\max(x(v) - x(u) + cost(u, v), 0) \]

两者的关系

对于最优化问题,如果形式类似,则可以按照对应的关系建图求解最大费用最大流。
需要注意必须是最大流,因为首先需要满足每个点的流量关系,所以必须要保证流满。

具体来说,建立源点 \(S\) 汇点 \(T\)
对于 \(b(u) > 0\) 的点,缺少进入的流量,连边 \((S, u, b(u), 0)\)
对于 \(b(u) < 0\) 的点,缺少流出的流量,连边 \((u, T, -b(u), 0)\)
对于 \((u, v)\),根据系数连边 \((u, v, cap(u, v), cost(u, v))\)

Luogu P3337 [ZJOI2013] 防守战线

考虑引入前缀和变量 \(s_i\)

那么问题变为:

\[\begin{align*} \min \sum\limits_{i = 1}^n &(s_i - s_{i - 1})c_i\\ s_i &\ge s_{i - 1}\\ s_{r_i} - s_{l_i - 1} &\ge d_i\\ \end{align*} \]

考虑变化一下形式:

\[\begin{align*} \min \sum\limits_{i = 1}^n (s_i - &s_{i - 1})c_i\\ s_{i - 1} - s_i&\le 0\\ s_{l_i - 1} + d_i - s_{r_i}&\le 0\\ \end{align*} \]

对于下方的限制,尝试引入 \(\infty\)

\[\begin{align*} \min \sum\limits_{i = 0}^n (c_i - c_{i + 1})s_i + \sum\limits_{i = 1}^n \infty\max(s_{i - 1} - s_i + 0, 0) + \sum\limits_{i = 1}^m \infty\max(s_{l_i - 1} - s_{r_i} + d_i, 0) \end{align*} \]

此时令 \(x(u)\)\(s_i\),则有 \(b(u) = c_i - c_{i + 1}\),对应可以连出 \(S, u, T\) 间的连边。
对于第二个 \(\sum\),根据对应关系可以得到 \((i, i - 1, \infty, 0)\)
对于第三个 \(\sum\),根据对应关系可以得到 \((r_i, l_i - 1, \infty, d_i)\)

求解最大费用最大流即可,可以把边权取反变为最小费用最后在取反得到答案。

posted @ 2025-12-31 16:34  rizynvu  阅读(3)  评论(0)    收藏  举报