差分约束系统包含 m m m个涉及 n n n个变量的差额限制条件,这些差额限制条件每个都是形式为 x i ? x j ≤ b ∈ [ 1 , m ] x_i-x_j\leq b_{\in[1,m]} xi??xj?≤b∈[1,m]?的简单线性不等式。
通常我们要求解出一组可行解。
如果我们把变量看做节点,如果这里用
d
u
d_u
du?表示
d
i
s
S
,
u
dis_{S,u}
disS,u?,那么从
u
u
u到
v
v
v的一条有向边必然满足
d
u
+
w
≥
d
v
d_u+w\geq d_v
du?+w≥dv?,即:
d
v
?
d
u
≤
w
d_v-d_u\leq w
dv??du?≤w
对比:
x
v
?
x
u
≤
b
i
x_v-x_u\leq b_i
xv??xu?≤bi?
因此对于每个限制条件
x
v
?
x
u
≤
b
i
x_v-x_u\leq b_i
xv??xu?≤bi?,我们可以在图上给
u
u
u到
v
v
v连接一条边权为
b
i
b_i
bi?的有向边。
同时建立一个虚拟源点
S
S
S,向着每个点连接一个长度为
0
0
0的边。
如果图中不存在负环,那么可以使用单源最短路径算法求出所有的 d u d_u du?,则 x i = d i x_i=d_i xi?=di?就是原问题的一组可行解。如果有负环说明无解。
定理:图中没有负环是差分约束系统有解的充要条件。
充分性显然,因为我们可以构造出一组解。
必要性:
如果图中存在负环,那么说明此差分约束系统无解:
设图中有一个负环,
w
1
+
w
2
+
w
3
<
0
w_1+w_2+w_3<0
w1?+w2?+w3?<0
x
1
+
w
1
≥
x
2
x_1+w_1\geq x_2
x1?+w1?≥x2?
x
1
+
w
1
+
w
2
≥
x
2
+
w
2
≥
x
3
x_1+w_1+w_2\geq x_2+w_2\geq x_3
x1?+w1?+w2?≥x2?+w2?≥x3?
x
1
+
w
1
+
w
2
+
w
3
≥
x
3
+
w
3
≥
x
1
x_1+w_1+w_2+w_3 \geq x_3+w_3\geq x_1
x1?+w1?+w2?+w3?≥x3?+w3?≥x1?
x
1
+
w
1
+
w
2
+
w
3
≥
x
1
x_1+w_1+w_2+w_3 \geq x_1
x1?+w1?+w2?+w3?≥x1?
这说明
x
1
+
一个负数
≥
x
1
x_1+一个负数\geq x_1
x1?+一个负数≥x1?,这是不可能的,因此这个差分约束系统是矛盾的,无解。
QED.
这样建图跑最短路求出的解是具有一定性质的,具体来说是:
证明:
只需证明性质2,性质1、3显然:
首先考虑虚拟源点
S
S
S的意义,即我们令
x
S
x_S
xS?表示一个新量,我们连零边表示:
x
i
∈
[
1
,
n
]
?
x
S
≤
0
x_{i\in[1,n]}-x_S\leq 0
xi∈[1,n]??xS?≤0。
然后我们在跑最短路时强制
x
S
=
d
S
=
0
x_S=d_S=0
xS?=dS?=0,因此我们连零边实际上限制了:
x
i
∈
[
1
,
n
]
≤
0
x_{i\in[1,n]}\leq 0
xi∈[1,n]?≤0
接下来考虑:
对于
x
i
=
d
i
x_i=d_i
xi?=di?,假设其对应的某条从
S
S
S到
i
i
i的最短路径依次经过了点
u
0
=
S
,
u
1
,
u
2
,
.
.
.
,
u
k
=
i
u_0=S,u_1,u_2,...,u_k=i
u0?=S,u1?,u2?,...,uk?=i,则经过的边对应的不等式为:
x
u
j
?
x
u
j
?
1
≤
w
j
x_{u_j}-x_{u_{j-1}}\leq w_j
xuj???xuj?1??≤wj?
求和得到:
∑
k
j
=
1
x
u
j
?
x
u
j
?
1
≤
∑
k
j
=
1
w
j
\underset{j=1}{\overset k\sum}x_{u_j}-x_{u_{j-1}}\leq \underset{j=1}{\overset k\sum} w_j
j=1∑k??xuj???xuj?1??≤j=1∑k??wj?
由于裂项:
x
u
k
?
x
u
0
≤
∑
k
j
=
1
w
j
x_{u_k}-x_{u_0}\leq \underset{j=1}{\overset k\sum}w_j
xuk???xu0??≤j=1∑k??wj?
由于我们指定了
x
S
=
0
x_S=0
xS?=0,也就是说:
x
i
≤
∑
k
j
=
1
w
j
x_i\leq \underset{j=1}{\overset k\sum}w_j
xi?≤j=1∑k??wj?
这给出了此差分约束系统中,满足所有变量都 ≤ 0 \leq 0 ≤0的任意一个解中, x i x_i xi?的一个上界。
同时我们断言这个上界是可以取到的,并且
x
i
=
d
i
=
∑
k
j
=
1
w
j
x_i=d_{i}=\underset{j=1}{\overset k\sum}w_j
xi?=di?=j=1∑k??wj?,原因如下,因为刚才经过的边事实上是由
S
S
S到
i
i
i的最短路径,根据相关理论,我们有:
d
i
s
S
,
u
j
?
d
i
s
S
,
u
j
?
1
=
w
j
dis_{S,u_j}-dis_{S,u_{j-1}}=w_j
disS,uj???disS,uj?1??=wj?
求和得到:
∑
k
j
=
1
d
i
s
S
,
u
j
?
d
i
s
S
,
u
j
?
1
=
∑
k
j
=
1
w
j
\underset{j=1}{\overset k\sum}dis_{S,u_j}-dis_{S,u_{j-1}}= \underset{j=1}{\overset k\sum} w_j
j=1∑k??disS,uj???disS,uj?1??=j=1∑k??wj?
由于裂项:
d
i
s
S
,
i
=
∑
k
j
=
1
w
j
dis_{S,i}=\underset{j=1}{\overset k\sum}w_j
disS,i?=j=1∑k??wj?
因此我们知道 x i = d i = d i s S , i = ∑ k j = 1 w j x_i=d_i=dis_{S,i}=\underset{j=1}{\overset k\sum}w_j xi?=di?=disS,i?=j=1∑k??wj?,证明上界可以取到。
QED.
如果我们用
d
u
d_u
du?表示
S
S
S到
u
u
u的最长路,那么对于有向边
(
u
,
v
)
(u,v)
(u,v):
d
u
+
w
≤
d
v
d_u+w\leq d_v
du?+w≤dv?
d
u
?
d
v
≤
?
w
d_u-d_v\leq -w
du??dv?≤?w
即:
x
u
?
x
v
≤
b
i
x_u-x_v\leq b_i
xu??xv?≤bi?
那么 b i = ? w b_i=-w bi?=?w,即 w = ? b i w=-b_i w=?bi?
那么从
u
u
u向
v
v
v连接一条长度为
?
b
i
-b_i
?bi?的有向边。
在从虚拟源点
S
S
S向着每个点连接一个边权为
0
0
0的有向边。
求出图中的最长路即为差分约束系统的一组解。
同理图中如果存在正环就无解。
这样建图跑最长路求出的解也具有一定性质的,具体来说是:
证明同理。
通常讨论的差分约束问题往往变量为整数,对于一些其他形式的简单线性不等式可以转化为差分约束问题
x
?
y
≤
b
x-y\leq b
x?y≤b:
x
?
y
<
b
?
x
?
y
≤
b
?
1
x-y<b\Rightarrow x-y\leq b-1
x?y<b?x?y≤b?1
x
?
y
≥
b
?
y
?
x
≤
?
b
x-y\geq b\Rightarrow y-x\leq -b
x?y≥b?y?x≤?b
x
?
y
>
b
?
y
?
x
<
?
b
x-y>b\Rightarrow y-x<-b
x?y>b?y?x<?b
x
?
y
=
b
?
x
?
y
≤
b
且
x
?
y
≥
b
x-y=b\Rightarrow x-y\leq b且x-y\geq b
x?y=b?x?y≤b且x?y≥b(当然如果全是等式限制直接高斯消元更好)
通常差分约束可能涉及对题意进行差分/前缀和转化。
建最短路得出的解一定是非正解,并且是最大解。
建最长路得出的解一定是非负解,并且是最小解。
同时注意到对一组可行解的每个变量都加 k k k之后,这个解仍然是可行解,因此我们可以获得全正/全负解。
于是皆大欢喜。