差分约束系统

差分约束系统

差分约束系统是一种特殊的 N N N元一次不等式组。它包含 N N N个变量 X 1 X_1 X1~ X N X_N XN以及 M M M个约束条件,每个约束条件都是由两个变量做差构成的,形如 X i − X j ≤ c k X_i-X_j\leq c_k XiXjck,其中 c k c_k ck是常数(可以是非负数,也可以是负数), 1 ≤ i , j ≤ N , 1 ≤ k ≤ M 1\leq i,j\leq N,1\leq k\leq M 1i,jN,1kM。我们要解决的问题就是:求一组解 X 1 = a 1 , X 2 = a 2 , ⋯   , X N = a N X_1=a_1,X_2=a_2,\cdots,X_N=a_N X1=a1,X2=a2,,XN=aN,即解 X = ( a 1 , a 2 , ⋯   , a N ) X=(a_1,a_2,\cdots,a_N) X=(a1,a2,,aN)使得所有约束条件都能得到满足。

差分约束系统的每个约束条件 X i − X j ≤ c k X_i-X_j\leq c_k XiXjck可以变形为 X i ≤ X j + c k X_i\leq X_j+c_k XiXj+ck,这与单源最短路径问题中的三角不等式 d i s t [ y ] ≤ d i s t [ x ] + z dist[y]\leq dist[x]+z dist[y]dist[x]+z非常相似,注意这个式子是更新过后的。因此,我们可以把每个变量 X i X_i Xi看作是有向图中的一个节点 i i i,对于每个约束条件 X i − X j ≤ c k X_i-X_j\leq c_k XiXjck,从节点 j j j向节点 i i i连一条长度为 c k c_k ck的有向边。

引理:

X = ( x 1 , x 2 , ⋯   , x n ) X=(x_1,x_2,\cdots,x_n) X=(x1,x2,,xn)是一个差分约束系统的一个解, d d d为任意常数,那么 X + d = ( x 1 + d , x 2 + d , ⋯   , x n + d ) X+d=(x_1+d,x_2+d,\cdots,x_n+d) X+d=(x1+d,x2+d,,xn+d)也是该系统的解。

证明:对于每个 x i x_i xi x j x_j xj,有 ( x j + d ) − ( x i + d ) = x j − x i (x_j+d)-(x_i+d)=x_j-x_i (xj+d)(xi+d)=xjxi。因此,若 X X X是这个差分约束系统的一个解,那么 X + d X+d X+d也是这个系统的解

例如:

X = { x 1 − x 2 ≤ 0 x 1 − x 5 ≤ − 1 x 2 − x 5 ≤ 1 x 3 − x 1 ≤ 5 x 4 − x 1 ≤ 4 x 4 − x 3 ≤ − 1 x 5 − x 3 ≤ − 3 x 5 − x 4 ≤ − 3 X=\begin{cases} x_1-x_2\leq 0 \\ x_1-x_5\leq -1 \\ x_2-x_5\leq 1\\ x_3-x_1\leq 5\\ x_4-x_1\leq 4\\ x_4-x_3\leq -1\\ x_5-x_3\leq -3\\ x_5-x_4\leq -3\end{cases} X=x1x20x1x51x2x51x3x15x4x14x4x31x5x33x5x43

该问题的一个解为 X = ( − 5 , − 3 , 0 , − 1 , − 4 ) X=(-5,-3,0,-1,-4) X=(5,3,0,1,4),令一个解为 X ′ = ( 0 , 2 , 5 , 4 , 1 ) X'=(0,2,5,4,1) X=(0,2,5,4,1),这两个解是有联系的, X ′ X' X中的每个元素比 X X X中的相应元素大5

这也正说明了,如果 X X X是一个差分约束系统的解,那么 X + d X+d X+d也是这个系统的解

假设 ∀ i , X i ≤ c \forall i,X_i\leq c i,Xic,然后再增加一个超级源点0号节点,令 X 0 = 0 X_0=0 X0=0,令 d = − X 0 d=-X_0 d=X0,等式两边同时加上 d d d,可得 X i − X 0 ≤ c − X 0 X_i-X_0\leq c-X_0 XiX0cX0,即 X i − X 0 ≤ c X_i-X_0\leq c XiX0c。这样一来,就多了 N N N个形如 X i − X 0 ≤ 0 X_i-X_0\leq 0 XiX00的约束条件,应该从节点0向每个节点 i i i连一条长度为0的有向边。


约束图

对于 n n n个变量, m m m个约束条件来说,其实就是对应于图论中的 n n n个节点, m m m条边。对于 i = 1 , 2 , ⋯   , n i=1,2,\cdots,n i=1,2,,n,图中的每一个顶点 v i v_i vi对应着 n n n个未知量中的一个 x i x_i xi,图中的每个有向边对应着关于两个未知量的 m m m个不等式的其中一个。

对于一个差分约束系统来说,相应的约束图是一个带权有向图 G = ( V , E ) G=(V,E) G=(V,E),其中 V = V= V={ v 0 , v 1 , ⋯   , v n v_0,v_1,\cdots,v_n v0,v1,,vn},而且 E = E= E={ ( v i , v j ) : x j − x i ≤ b k (v_i,v_j):x_j-x_i\leq b_k (vi,vj):xjxibk} ⋃ \bigcup { ( v 0 , v 1 ) , ( v 0 , v 2 ) , ⋯   , ( v 0 , v n ) (v_0,v_1),(v_0,v_2),\cdots,(v_0,v_n) (v0,v1),(v0,v2),,(v0,vn)}

这里引入超级源点 v 0 v_0 v0是为了保证其他每个顶点 v 1 , v 2 , ⋯   , v n v_1,v_2,\cdots,v_n v1,v2,,vn均从 v 0 v_0 v0可达。因此,顶点集合 V V V由对应于每个未知量 x i x_i xi的顶点 v i v_i vi和附加的顶点 v 0 v_0 v0所组成。边的集合 E E E由对应于每个差分约束条件的边与对应于每个未知量 x i x_i xi的边 ( v 0 , v i ) (v_0,v_i) (v0,vi)所构成。如果 x j − x i ≤ b k x_j-x_i\leq b_k xjxibk是一个差分约束,则边 ( v i , v j ) (v_i,v_j) (vi,vj)的权 w ( v i , v j ) = b k w(v_i,v_j)=b_k w(vi,vj)=bk。从超级源点 v 0 v_0 v0出发的每条边的权值均为0。

约束图如下:

image-20210707093808678


定理

给定一个差分约束系统,设 G = ( V , E ) G=(V,E) G=(V,E)为其相应的约束图。如果 G G G不包含负权回路(即负环),那么

X = ( δ ( v 0 , v 1 ) , δ ( v 0 , v 2 ) , δ ( v 0 , v 3 ) , ⋯   , δ ( v 0 , v n ) ) X=(\delta (v_0,v_1),\delta (v_0,v_2),\delta (v_0,v_3),\cdots,\delta (v_0,v_n)) X=(δ(v0,v1),δ(v0,v2),δ(v0,v3),,δ(v0,vn))

是此系统的一个可行解。当且仅当 G G G中存在负环时,该系统不存在可行解。

上式中 δ ( v 0 , v 1 ) \delta(v_0,v_1) δ(v0,v1)表示超级源点 v 0 v_0 v0到节点 v 1 v_1 v1的真实的最短距离,其他同理。跑一边最短路算法后得到的 d i s t [ v 1 ] dist[v_1] dist[v1]其实就是 δ ( v 0 , v 1 ) \delta(v_0,v_1) δ(v0,v1)

证明:

  • 首先来证明,如果 G G G中不存在负环时,那么可以求出一个可行解。考察任意边 ( v i , v j ) ∈ E (v_i,v_j)\in E (vi,vj)E,由三角不等式 δ ( v 0 , v j ) ≤ δ ( v 0 , v i ) + w ( v i , v j ) \delta (v_0,v_j)\leq \delta (v_0,v_i)+w(v_i,v_j) δ(v0,vj)δ(v0,vi)+w(vi,vj),即 δ ( v 0 , v j ) − δ ( v 0 , v i ) ≤ w ( v i , v j ) \delta (v_0,v_j)-\delta (v_0,v_i)\leq w(v_i,v_j) δ(v0,vj)δ(v0,vi)w(vi,vj)。因此,设 x i = δ ( v 0 , v i ) , x j = δ ( v 0 , v j ) x_i=\delta (v_0,v_i),x_j=\delta(v_0,v_j) xi=δ(v0,vi),xj=δ(v0,vj),带入上式子可知满足对应边 ( v i , v j ) (v_i,v_j) (vi,vj)的差分约束 x j − x i ≤ w ( v i , v j ) x_j-x_i\leq w(v_i,v_j) xjxiw(vi,vj)

  • 接下来再来证明,如果 G G G中存在负环,那么差分约束系统不存在可行解。设负权回路为 c = < v 1 , v 2 , ⋯   , v k > c=<v_1,v_2,\cdots,v_k> c=<v1,v2,,vk>,其中 v 1 = v k v_1=v_k v1=vk(因为节点 v 0 v_0 v0没有入边,所以它不可能再回路 c c c上)。回路 c c c对应着如下的差分约束:

    { x 2 − x 1 ≤ w ( v 1 , v 2 ) x 3 − x 2 ≤ w ( v 2 , v 3 ) ⋯ x k − x k − 1 ≤ w ( v k − 1 , v k ) x 1 − x k ≤ w ( v k , v 1 ) \begin{cases}x_2-x_1\leq w(v_1,v_2)\\ x_3-x_2\leq w(v_2,v_3)\\ \cdots \\ x_k-x_{k-1}\leq w(v_{k-1},v_k)\\ x_1-x_k\leq w(v_k,v_1) \end{cases} x2x1w(v1,v2)x3x2w(v2,v3)xkxk1w(vk1,vk)x1xkw(vk,v1)

    假设存在满足 k k k个不等式的一个解 X X X,那么也满足上述 k k k个不等式相加所得到的不等式。如果把这些不等式相加,就会发现每个变量 x i x_i xi的正负项相互抵消了,结果左边项和为0,而右边项和为 w ( c ) w(c) w(c),因此有 0 ≤ w ( c ) 0\leq w(c) 0w(c)。但是由于 c c c是一个负权回路,因此有 w ( c ) < 0 w(c)<0 w(c)<0,因此得到矛盾 0 ≤ w ( c ) < 0 0\leq w(c)<0 0w(c)<0,由此得证


求不等式组的可行解:

源点需要满足的条件:从源点出发,一定可以走到所有边

步骤:

  • 先将每个不等式 x i ≤ x j + c k x_i\leq x_j+c_k xixj+ck,转化为一条从 x j x_j xj走到 x i x_i xi,长度为 c k c_k ck的一条边
  • 找到一个超级源点,使得该源点一定可以遍历到所有边
  • 从源点求一边单源最短路
    • 如果存在负环,则原不等式组一定无解
    • 如果不存在负环,则 X = ( d i s t [ v 1 ] , d i s t [ v 2 ] , ⋯   , d i s t [ v n ] ) X=(dist[v_1],dist[v_2],\cdots,dist[v_n]) X=(dist[v1],dist[v2],,dist[vn])的一个可行解

在某些题目中,约束条件形如 X i − X j ≥ c k X_i-X_j\geq c_k XiXjck,我们仍然可以从 j j j i i i连一条长度为 c k c_k ck的有向边,只不过现在应该要计算单源最长路,若图中存在正环则无解。当然,我们也可以把约束条件转换为 X j − X i ≤ − c k X_j-X_i\leq -c_k XjXick,再按照单源最短路进行计算


最大值和最小值

对于给定的一组不等式关系,如何求出每个变量的最大值或者最小值呢?

什么是最大值或最小值?

这里的意思是说,比如你求出了一个解 X = ( x 1 , x 2 , ⋯   , x n ) X=(x_1,x_2,\cdots,x_n) X=(x1,x2,,xn),那么 X ′ = ( x 1 + d , x 2 + d , ⋯   , x n + d ) X'=(x_1+d,x_2+d,\cdots,x_n+d) X=(x1+d,x2+d,,xn+d)也是一个解, X ′ ′ = ( x 1 + 2 d , x 2 + 2 d , ⋯   , x 3 + 3 d ) X''=(x_1+2d,x_2+2d,\cdots,x_3+3d) X=(x1+2d,x2+2d,,x3+3d)也是一个解,那么我想知道某个变量 x i x_i xi的最大值,那么到底是取 x i x_i xi还是 x i + d x_i+d xi+d还是 x i + 2 d x_i+2d xi+2d呢?同理,求某个变量 x i x_i xi的最小值也是一样的含义。

结论:

  • 如果求的是最小值,那么应该求单源最长路
  • 如果求的是最大值,那么应该求单源最短路

证明:

以求 x i x_i xi的最大值为例:

求所有从 x i x_i xi出发,构成的多个形如如下的不等式链:

x i ≤ x j + c m ≤ x k + c m + c n ≤ ⋯ ≤ x 0 + c 0 + c 4 + ⋯ + c n + c m x_i\leq x_j+c_m\leq x_k+c_m+c_n\leq \cdots \leq x_0+c_0+c_4+\cdots +c_n+c_m xixj+cmxk+cm+cnx0+c0+c4++cn+cm,其中 x 0 = 0 , c 0 = 0 x_0=0,c_0=0 x0=0,c0=0,令 F = F= F= x 0 + c 0 + c 4 + ⋯ + c n + c m x_0+c_0+c_4+\cdots +c_n+c_m x0+c0+c4++cn+cm

那么 x i x_i xi的最大值,要注意 F F F可能多很多个,因此,我们取 F F F中最小的那个值,就是 x i x_i xi的最大值

例如 x i ≤ 5 , x i ≤ 7 , x i ≤ 9 x_i\leq 5,x_i\leq 7,x_i\leq 9 xi5,xi7,xi9,那么 x i x_i xi的最大值为5。假设 x i x_i xi取最大值为9,那么就不满足 x i ≤ 5 x_i\leq 5 xi5 x i ≤ 7 x_i\leq 7 xi7了。

把上述转换成图论的问题,其实就是求 d i s t [ i ] dist[i] dist[i]的最小值(因为 F F F表示的是从起点出发,到达某个点的距离。那么求 F F F的最小值,其实就是求单源最短路),那么就可以用最短路来求解。

以求 x i x_i xi的最小值为例:

求所有从 x i x_i xi出发,构成的多个形如如下的不等式链:

x i ≥ x j + c m ≥ x k + c m + c n ≥ ⋯ ≥ x 0 + c 0 + c 4 + ⋯ + c n + c m x_i\geq x_j+c_m\geq x_k+c_m+c_n\geq \cdots \geq x_0+c_0+c_4+\cdots +c_n+c_m xixj+cmxk+cm+cnx0+c0+c4++cn+cm,其中 x 0 = 0 , c 0 = 0 x_0=0,c_0=0 x0=0,c0=0,令 F = F= F= x 0 + c 0 + c 4 + ⋯ + c n + c m x_0+c_0+c_4+\cdots +c_n+c_m x0+c0+c4++cn+cm

那么 x i x_i xi的最小值,要注意 F F F可能多很多个,因此,我们取 F F F中最大的那个值,就是 x i x_i xi的最小值

例如 x i ≥ 5 , x i ≥ 7 , x i ≥ 9 x_i\geq 5,x_i\geq 7,x_i\geq 9 xi5,xi7,xi9,那么 x i x_i xi的最大值为9。假设 x i x_i xi取最小值为5,那么就不满足 x i ≥ 7 x_i\geq 7 xi7 x i ≥ 9 x_i\geq 9 xi9了。

下面举个图例:

X = { x 2 − x 1 ≤ c 1 x 3 − x 2 ≤ c 2 x 3 − x 1 ≤ c 3 X=\begin{cases}x_2-x_1\leq c_1\\ x_3-x_2\leq c_2\\ x_3-x_1\leq c_3 \end{cases} X=x2x1c1x3x2c2x3x1c3

那么,我们可以求出这样的:

{ x 3 ≤ x 1 + c 3 x 3 ≤ x 1 + c 1 + c 2 \begin{cases}x_3\leq x_1+c_3\\ x_3\leq x_1+c_1+c_2 \end{cases} {x3x1+c3x3x1+c1+c2

可以看出,约束变量 x 3 x_3 x3的有两个条件,如果画到图中,就对应于有2条路径。那么当我们要求 x 3 x_3 x3的最大值时,取的肯定是 x 1 + c 3 x_1+c_3 x1+c3 x 1 + c 1 + c 2 x_1+c_1+c_2 x1+c1+c2中的最小值,这样才能保证满足这两个约束条件,进而满足题目给定的所有原始的约束条件。

我们添加超级源点 s s s v 0 v_0 v0,那么有 x 1 − x 0 ≤ c 0 x_1-x_0\leq c_0 x1x0c0,因此有如下:

{ x 3 ≤ x 0 + c 0 + c 3 x 3 ≤ x 0 + c 0 + c 1 + c 2 \begin{cases}x_3\leq x_0+c_0+c_3\\ x_3\leq x_0+c_0+c_1+c_2 \end{cases} {x3x0+c0+c3x3x0+c0+c1+c2

其中 x 0 = 0 , c 0 = 0 x_0=0,c_0=0 x0=0,c0=0

解释一样 x 0 + c 0 + c 3 x_0+c_0+c_3 x0+c0+c3的含义:它表示从源点 v 0 v_0 v0到达节点 v 3 v_3 v3所走过的路径上的权值之和。 x 0 + c 0 + c 1 + c 2 x_0+c_0+c_1+c_2 x0+c0+c1+c2也是一样的含义。

画图如下:

image-20210707094207521

对应有两条路径:

  • v 0    ⟹    v 1    ⟹    v 3 v_0\implies v_1\implies v_3 v0v1v3,从源点 v 0 v_0 v0走到节点 v 3 v_3 v3,所走过的路径之和为 c 0 + c 3 c_0+c_3 c0+c3
  • v 0    ⟹    v 1    ⟹    v 2    ⟹    v 3 v_0\implies v_1\implies v_2\implies v_3 v0v1v2v3,从源点 v 0 v_0 v0走到节点 v 3 v_3 v3,所走过的路径之和为 c 0 + c 1 + c 2 c_0+c_1+c_2 c0+c1+c2
  • 可以发现,既然我们知道了等式右边的式子含义,其实就是求从源点出发到达某个节点的距离,由于可能存在多条路径,因此有多个值,那么我们只需要根据单源最短路径算法,就可以求出最小的那个值了,设为 F m i n F_{min} Fmin。因此,如果想要求某个变量 x i x_i xi的最大值,那么就要满足 M a x ( x i ) ≤ F m i n Max(x_i)\leq F_{min} Max(xi)Fmin。这也就是说,求变量 x i x_i xi的最大值,等价于跑一下单源最短路,求出最短路径的权值之和

因此,相应的就可以知道,要求 x i x_i xi的最小值,其实就是跑一下单源最长路,求出最长路径的权值之和。


总结

  • x i ≥ x j + c x_i\geq x_j+c xixj+c,则从节点 j j j向节点 i i i连一条长度为 c c c的边,要求变量 x i x_i xi的最小值,则跑一下最长路即可
  • x i ≤ x j + c x_i\leq x_j+c xixj+c,则从节点 j j j向节点 i i i连一条长度为 c c c的边,要求变量 x i x_i xi的最大值,则跑一下最短路即可

总结

  • x i ≥ x j + c x_i\geq x_j+c xixj+c,则从节点 j j j向节点 i i i连一条长度为 c c c的边,要求变量 x i x_i xi的最小值,则跑一下最长路即可
  • x i ≤ x j + c x_i\leq x_j+c xixj+c,则从节点 j j j向节点 i i i连一条长度为 c c c的边,要求变量 x i x_i xi的最大值,则跑一下最短路即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卷心菜不卷Iris

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值