ZJOI2013 防守战线

简要题意

在段 \([1, n]\) 上建立防御塔,每个位置都可以建立任意多个,第 \(i\) 个位置的费用为每个 \(C_i\)。给出 \(m\) 个限制,形如区间 \([L_j, R_j]\) 内至少总共有 \(D_j\) 个防御塔。问最小代价。

数据范围:\(1\le n\le 1000, 1\le m\le 10000\)

最大费用流问题的对偶

考虑一个最大费用流问题中,点 \(u\) 的流出减流入等于 \(d_u\),一条边 \(e_k = (u_k, v_k, c_k, w_k)\),流量为 \(f_k\) 是待规划的变量。则最大费用流形如:

\[\begin{align*} \sum_{u_k = x}f_k - \sum_{v_{k'} = x}f_{k'} \le d_x\\ f_k\le c_k\\ \max\sum_k f_kw_k \end{align*} \]

它的对偶形式:

\[\begin{align*} p_{u_k} - p_{v_k} + z_k \ge w_k\\ \min\sum_k c_kz_k + \sum_x d_xp_x\\ \end{align*} \]

即:

\[\min\sum_k c_k\max\{0, w_k - p_{u_k} + p_{v_k}\} + \sum_x d_xp_x \]

可以解决许多线性规划问题。

题解

设第 \(i\) 个位置有 \(A_i\) 个防御塔,考虑前缀和 \(S_i = \sum\limits_{j=1}^iA_j\),则问题转化为:

\[\begin{align*} S_i \ge S_{i - 1},\\ S_{R_j} - S_{L_j-1} \ge D_j,\\ \min\sum\limits_{i=1}^n(S_i - S_{i-1})C_i \end{align*} \]

写成线性规划

\[\begin{align*} S_i - S_{i-1}\ge 0,\\ S_{R_j} - S_{L_j-1} \ge D_j,\\ \min\sum\limits_{i=0}^n(C_i - C_{i+1})S_i \end{align*} \]

考虑费用流对偶,将上式写成:

\[\min\sum\limits_{i=0}^n(C_i - C_{i+1})S_i + \sum\limits_{i=1}^n\infty\cdot\max\{S_{i-1} - S_i, 0\} + \sum\limits_{j=1}^m\infty\cdot\max\{S_{L_j-1} - S_{R_j} + D_j, 0\} \]

那么费用流模型即为:点集 \(0\dots n\)\(i\) 个点流出减流入为 \(C_i - C_{i+1}\), 第 \(i\) 个点向 \(i-1\) 连代价为 \(0\) 流量无穷大的边,第 \(R_j\) 个点向第 \(L_j - 1\) 个点连代价为 \(D_j\) 流量无穷大的边。

认为 \(C_0 = C_{n+1} = 0\)。比较 trivial。

费用流板子比较烂,T了,后面再搞搞。

posted @ 2023-05-10 15:21  kyEEcccccc  阅读(54)  评论(0)    收藏  举报