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}⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧fuv≤cuv∑vfvu−∑vfuv=0 (u=S,T) ∑vfvS−∑vfSv=−F∑vfvT−∑vfTv=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)+∑xuvcuv}{xuv+disv−disu≤wuvxuv≤0,disi无限制
将
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)−∑xuvcuv}{disv≤disu+wuv+xuvxuv≥0,disi无限制
观察约束条件可以发现,当
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⋅(disT−disS)−XF⋅(disT−disS)−XdisT−disS≤∑fuvwuv≤cost≤Fcost+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) 。