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

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{fuvwuv}fuvcuvvfvuvfuv=0  (u=S,T)  vfvSvfSv=FvfvTvfTv=Ffuv0////
转对偶问题,得到一个有 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(disTdisS)+xuvcuv}{xuv+disvdisuwuvxuv0disi
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(disTdisS)xuvcuv}{disvdisu+wuv+xuvxuv0disi
观察约束条件可以发现,当 d i s i dis_i disi 表示最短路, x u v x_{uv} xuv 表示一条边增加的边权时,约束条件成立。那么 ∑ x u v c u v \sum x_{uv}c_{uv} xuvcuv 就表示 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(disTdisS)XF(disTdisS)XdisTdisSfuvwuvcostFcost+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

posted @ 2022-10-10 20:18  缙云山车神  阅读(19)  评论(0编辑  收藏  举报