Codeforces 1307G Cow and Exercise [线性规划,费用流]

前置知识

线性规划和转对偶问题。

对于费用流,设 \(c_{vw}\) 为费用,\(u_{vw}\) 为流量上界, \(x_{vw}\) 为真实流量, \(b_v\)\(v\) 的入度减出度(并且需要满足 \(\sum b_v=0\)),那么得到的线性规划问题就为

\[\min\left\{\sum_{v,w} c_{vw} x_{vw}\right\}\\ \left\{\begin{array}{ll} \sum_{w}(x_{wv}-x_{vw})=b_{v} & v \in V \\ 0 \leq x_{v w} \leq u_{v w} & (u, w) \in E \end{array}\right. \]

由于 \(\sum b_v=0\) ,所以 \(\sum_{w}(x_{wv}-x_{vw})=b_{v}\) 其实等价于 \(\sum_{w}(-x_{wv}+x_{vw})\le -b_{v}\) 对于每个点都成立。(注意这里转成了出度减入度,为了能和CF的题解对上)

不过由于需要找到 \(\min\) ,而限制条件都是 \(\le\) ,强行给他带个负号,变成求

\[-\max\left\{\sum_{v,w} (-c_{vw}) x_{v,w}\right\} \]

然后转对偶问题,给边的限制的变量为 \(z_{vw}\) ,给点的限制的变量为 \(y_v\) ,那么就是要求

\[-\min \left\{\sum_v (-b_{v}) y_{v}+\sum_{(v, w)} u_{v w} z_{v w}\right\}\\ \left\{\begin{array}{ll} -y_{v}+y_{w}-z_{v w} \leq c_{v w}\\ z_{v w} \geq 0 \end{array} \quad \begin{array}{l} & (v, w) \in E \\ & (v, w) \in E \end{array}\right. \]

再把这个负号放回去,变成

\[\max \left\{\sum_v b_{v} y_{v}-\sum_{(v, w)} u_{v w} z_{v w}\right\} \]

就变成官方题解里的式子了。

做法 0

考虑上面转对偶问题转出来了个啥:限制可以变成

\[\left\{\begin{array}{ll} y_{w}\leq c_{v w}+z_{v w}+y_{v}\\ z_{v w} \geq 0 \end{array} \quad \begin{array}{l} & (v, w) \in E \\ & (v, w) \in E \end{array}\right. \]

那么把 \(y\) 看做最短路,\(z\) 看做给边额外加的边权,\(c\) 看做原有的边权,上面的式子就变成新图中最短路的三角不等式了。

然后设 \(b_1=-f,b_n=f,b_v=0,v\notin\{1,n\}\) ,再设 \(u_{v,w}=1\) ,我们就发现

\[\max \left\{f\times(y_n-y_1)-\sum_{(v, w)} z_{v w}\right\} \]

是可以求出来的了。(怎么求?对偶回去用费用流求解。\(f\) 是某一个流量(不一定要最大)。)

设某一个方案求出来的是 \((f,cost)\)\(\sum_{(v, w)} z_{v w}=x_i\) (即为询问),那么就有 \(y_n-y_1\le {cost+x\over f}\) 。取卡得最紧的即为答案。

为什么?可以看做法 1 。

也可以考虑设 \(D=y_n-y_1\) ,然后用这种方法求出 \(\sum z\) 的最小值,和 \(x_i\) 比较。本质上应该是一样的。

做法 1

设答案的下界为 \(D\) ,边权增长量为 \(a_{u,v}\) ,原边权为 \(w_{u,v}\) ,给每一个点定的最短路为 \(d_u\) ,那么如果能求出

\[\min \left\{\sum_{(u, v) \in E} a_{u, v}\right\} \\ \left\{\begin{array}{l} d_{u}-d_{v}+a_{u, v} \geq-w_{u, v} \\ d_{n}-d_{1} \geq D \\ d_{i} \geq 0, a_{u, v} \geq 0 \end{array}\right. \]

且这个 \(\min\le X\) ,那么 \(D\) 就是合法的。

线性规划转对偶问题,给一条边的限制定一个变量 \(b_{u,v}\) ,给 \(d_n-d_1\ge D\) 的限制定一个变量 \(f\) ,那么有

\[\max \left\{D \times f-\sum_{(u, v) \in E} w_{u, v} \times b_{u, v}\right\} \\ \left\{\begin{array}{l} \sum_{i} b_{u, i}-\sum_{i} b_{i, u} \leq 0 \quad u \neq 1, n \\ \sum_{i} b_{1, i}-\sum_{i} b_{i, 1}-f \leq 0 \\ \sum_{i} b_{n, i}-\sum_{i} b_{i, n}+f \leq 0 \\ 0 \leq b_{u, v} \leq 1,0 \leq f \end{array}\right. \]

同样可以看出这像是一个费用流。事实上这大概就是做法 0 倒过来……

做法 2

懒得写了……放个链接:https://www.cnblogs.com/Tiw-Air-OAO/p/13154586.html

posted @ 2020-07-20 09:48  p_b_p_b  阅读(524)  评论(0编辑  收藏  举报