当前位置: 代码迷 >> 综合 >> CF1307G Cow and Exercise 【线性规划转对偶+费用流】
  详细解决方案

CF1307G Cow and Exercise 【线性规划转对偶+费用流】

热度:25   发布时间:2023-12-06 00:11:40.0
CF1307G Cow and Exercise

S S S 为源点, T T T 为汇点,流量为 F F F ,费用为 c o s t cost cost f u v f_{uv} fuv? 表示 u u u v v v 的实际流量, c u v c_{uv} cuv? 表示 u u u v v v 的流量限制, w u v w_{uv} wuv? 表示 u u u v v v 的边权。

那么最小费用的线性规划形式则为
m i n { ∑ f u v w u v } { f u v ≤ c u v / / 流 量 限 制 ∑ v f v u ? ∑ v f u v = 0 ( u ≠ S , T ) / / 流 量 平 衡 ∑ v f v S ? ∑ v f S v = ? F ∑ v f v T ? ∑ v f T v = F f u v ≥ 0 min\{\sum f_{uv}w_{uv} \} \\ \begin{cases} f_{uv}\le c_{uv} &//流量限制 \\ \sum_v f_{vu}-\sum_v f_{uv}=0\ \ (u\ne S,T)\ \ &//流量平衡 \\ \sum_v f_{vS}-\sum_v f_{Sv}=-F \\ \sum_v f_{vT}-\sum_v f_{Tv}=F \\ f_{uv}\ge 0 \end{cases} min{ fuv?wuv?}????????????????fuv?cuv?v?fvu??v?fuv?=0  (u??=S,T)  v?fvS??v?fSv?=?Fv?fvT??v?fTv?=Ffuv?0?////
转对偶问题,得到一个有 n 2 + n n^2+n n2+n 个变量的线性规划。记前 n 2 n^2 n2 个喂 x u v x_{uv} xuv? ,后 n n n 个为 d i s i dis_i disi? 。则对偶问题为:
m a x { F ? ( d i s T ? d i s S ) + ∑ x u v c u v } { x u v + d i s v ? d i s u ≤ w u v x u v ≤ 0 , d i s i 无 限 制 max\{ F\cdot(dis_T-dis_S)+\sum x_{uv}c_{uv} \} \\ \begin{cases} x_{uv}+dis_v-dis_u\le w_{uv} \\ x_{uv}\le 0,dis_i无限制 \end{cases} max{ F?(disT??disS?)+xuv?cuv?}{ xuv?+disv??disu?wuv?xuv?0disi??
x u v x_{uv} xuv? 取相反数可得:
m a x { F ? ( d i s T ? d i s S ) ? ∑ x u v c u v } { d i s v ≤ d i s u + w u v + x u v x u v ≥ 0 , d i s i 无 限 制 max\{ F\cdot(dis_T-dis_S)-\sum x_{uv}c_{uv} \} \\ \begin{cases} dis_v\le dis_u+w_{uv}+x_{uv} \\ x_{uv}\ge 0,dis_i无限制 \end{cases} max{ F?(disT??disS?)?xuv?cuv?}{ disv?disu?+wuv?+xuv?xuv?0disi??
观察约束条件可以发现,当 d i s i dis_i disi? 表示最短路, x u v x_{uv} xuv? 表示一条边增加的边权时,约束条件成立。那么 ∑ x u v c u v \sum x_{uv}c_{uv} xuv?cuv? 就表示 X X X (增加的边权和)。发现 X X X 就是题目的 x x x ,这就是题目的线性规划形式。(如果不严谨请轻喷233

联系原线性规划形式我们可以得到:( c o s t cost cost 为费用)
F ? ( d i s T ? d i s S ) ? X ≤ ∑ f u v w u v F ? ( d i s T ? d i s S ) ? X ≤ c o s t d i s T ? d i s S ≤ c o s t + X F \begin{aligned} F\cdot(dis_T-dis_S)-X&\le\sum f_{uv}w_{uv} \\ F\cdot(dis_T-dis_S)-X&\le cost \\ dis_T-dis_S&\le \frac{cost+X}{F} \\ \end{aligned} F?(disT??disS?)?XF?(disT??disS?)?XdisT??disS??fuv?wuv?costFcost+X??
所以我们现在要做的就是求最小的 c o s t + X F \frac{cost+X}{F} Fcost+X? 。固定总流量是 F F F ,跑费用流求最小的 c o s t cost cost 。显然 ( F , c o s t ) (F,cost) (F,cost) 是凸的,那么最小的 c o s t + X F \frac{cost+X}{F} Fcost+X? 就可以三分来求。 O ( n 2 m + q log ? n ) O(n^2m+q\log n) O(n2m+qlogn)

我猜可能需要的前置知识_byYXY