CF1307G

题意

cf

做法

\(l_{u,v}((u,v)\in E)\)为边\((u,v)\)的边权
\(x_{u,v}\)为对边\((u,v)\)的增量
\(X\)为总增量限制
\(d_i\)为一组增量序列\(\{x\}\)对图造成影响后,从\(s\)\(i\)的最短路径

可以发现\(d_s\)是什么并不重要,我们将其写成线性规划的形式

\[\\ max(d_t-d_s)\\ \left\{\begin{array}{} d_v\le d_u+l_{u,v}+x_{u,v}\\ \sum\limits_{(u,v)\in E}x_{u,v}\le X\\ x_{u,v}\ge 0\\ \end{array}\right. \]

二分\(d_t-d_s\ge \lambda\)来判断答案

\[\\ min(\sum\limits_{(u,v)\in E}x_{u,v})\\ \left\{\begin{array}{} d_v\le d_u+l_{u,v}+x_{u,v}\\ d_t-d_s\ge \lambda\\ x_{u,v}\ge 0\\ \end{array}\right. \]

发现这个其实就是\(min(max(\lambda +d_s-d_t,0)\cdot \infty+\sum\limits_{(u,v)\in E}max(d_v-d_u-l_{u,v},0)\cdot 1)\)
于是我们对偶到最大循环费用流上

我们求网络流是流量都为整数,你可能会想为什么整数解就一定会有最优解,放心写吧,这个定理貌似就是这样的

\(s\longrightarrow t(flow:\infty,cost:\lambda)\)
\(v\longrightarrow u(flow:1,cost:-l_{u,v})((u,v)\in E)\)
不考虑第一类边,对\(t\longrightarrow s\)跑最大费用流,令流量为\(i\)时费用为\(f_i\),则总费用为\(i\lambda+f_i\)
则最大循环费用流为\(max(i\lambda +f_i)\),需要满足\(\le X\),即\(\lambda\le \frac{X-f_i}{i}\),于是我们发现不用二分了

由于题目保证没有重边,故最大流量是\(O(n)\)的,询问是枚举\(i\)即可

posted @ 2020-11-15 19:52  Grice  阅读(129)  评论(0编辑  收藏  举报