「学习笔记」线性规划 / 网络流

对偶问题

\[\max \{ c^\intercal x \mid A x \leq b \} = \min \{ b^\intercal y \mid A^\intercal y \geq c \} \]

来道例题:

洛谷P3337 [ZJOI2013]防守战线

列出式子:

\[\begin{aligned} & \mathrm{minimize} \ \sum_i c_i y_i \\ & s.t. \ \forall i \in [1, n], \ \sum_{l_i \leq j \leq r_i} y_j \geq d_i \\ & \forall i \in [1, n], \ y_i \geq 0 \end{aligned} \]

\(A^\intercal_{i,j} = [j \in [l_i, r_i]]\)\(b = \begin{bmatrix} c_1 \\ c_2 \\ \vdots \\ c_n \end{bmatrix}\)\(c =\begin{bmatrix} d_1 \\ d_2 \\ \vdots \\ d_n \end{bmatrix}\),于是对偶之后为:

\[\begin{aligned} & \mathrm{maximize} \ \sum_i d_i x_i \\ & s.t. \ \forall i \in [1, n], \ \sum_{j} A_{i, j} x_j \geq c_i \\ & \forall i \in [1, n], \ x_i \geq 0 \end{aligned} \]

同时 \(A\) 的列中有连续的 \(1\) 出现。

感觉很不错,于是加上松弛变量:

\[\sum_{j} A_{i,j} x_j + y_i = c_i \]

差分后:

\[\sum_{l_j = i} x_j - \sum_{r_j + 1 = i} x_j + y_i - y_{i - 1} = c_i - c_{i - 1} \]

移项得到:

\[\sum_{l_j = i} x_j + c_{i - 1} + y_i = \sum_{r_j + 1 = i} x_j + c_i + y_{i - 1} \]

将等式看成一个点的流量平衡,于是就有这样的连边方案:

  • 点集 \(V = {S, T, 1, 2, \cdots, n + 1}\)

  • \(\forall i \in [1, n + 1]\),连边 \((S, i, c_{i - 1}, 0)\)(即从 \(S\)\(i\),流量为 \(c_{i - 1}\),费用为 \(0\))和 \((i, T, c_i, 0)\)

  • \(\forall i \in [1, n]\),连边 \((i + 1, i, \infty, 0)\) 表示松弛变量。

  • 对任意区间 \([l_i, r_i]\),连边 \((r_i + 1, l_i, \infty, d_i)\)

于是上最大费用最大流即可,具体实现细节可以见代码


未完待续。。。

posted @ 2020-01-18 22:34  xgzc  阅读(293)  评论(3编辑  收藏  举报