差分约束系统

1.差分约束系统

假设有这样一组不等式

X1-X2 <= 0

X1-X5 <= -1

X2-X5 <= 1

X3-X1 <= 5

X4-X1 <= 4

X4-X3 <= -1

X5-X3 <= -3

X5-X4 <= -3

每个不等式都是两个未知数的差小于等于某个常数(大于等于也行,因为左右*-1即可)。这样的不等式组称为差分约束系统

这个不等式组要么无解,要么无数组解,因为如果有一组解{X1, X2, ...Xn},那么每个数字加上常数k也满足不等式,因为两个数同时加上k,他们之间的差不变。

2.差分约束系统和最短路径

此处应有传送门:

 Dijkstra

 *Bellman-Ford

 *SPFA

 Floyd

(*表示重点)

差分约束系统的求解需要利用单源最短路径问题中的三角形不等式,即对于有向图(无向图)中的任何一条边<u, v>都有:

    d[v] <= d[u] + Edge[u][v]

式中d[u]和d[v]表示从原点分别到顶点u,v的最短路径的长度,Edge[u][v]是边的权值。式子显然成立,可参考上述链接Bellman-Ford算法中的松弛过程讲解。

上面的不等式可以转化成d[v] - d[u] <=  Edge[u][v]

3.有向图的构造

构造方法:

每个不等式中的未知数Xi对应图中的一个顶点Vi,把所有不等Xi-Xj<=c转化成边<Vj. Vi>,权值为c

最后加入一个源点X0,由于三角不等式,索性把源点0到其他点的距离设置成0,以上述例子为例,就多出下面5条不等式

X1 - X0 <= 0

X2 - X0 <= 0

X3 - X0 <= 0

X4 - X0 <= 0

X5 - X0 <= 0

根据上述不等式,可以建出下图:

 构件好图之后,以V0为源点,求单源最短路径,由于存在负权边,所以只能用Bellman-Ford求解,最终得到V0到个点的最短路径就是上述差分约束系统的一组解

如上图,{-5,-3,0,-1,4}就是一组解,如果把每个数字加上10也满足之前的不包括X0的不等式,但是这是无关紧要的,因为X0本来就是后来加上去的,满不满足X0有关的式子并不影响原来不等式组的解。

关于源点V0的取值,对于{-5,-3,0,-1,4}来说V0取的是0,因为本来就求源点到某点的最短路径长度,源点到自己本身的距离就是0。

4.差分约束系统无解的情况

如果建设的有向图中存在负权值回路(负环),那么就是无解。

X1 - X5 <= -5

X4 - X1 <= 3

X5 - X4 <= -1

上述三式相加得0 <= -3,无解

 差分约束系统求最大值时,构造边按照:d[v] - d[u] <=  Edge[u][v] (u->v连边),求解时按照最短路求解(也就是松弛的时候按照原来的方式进行松弛)

求最小值时,构造边按照:d[v] - d[u] >= Edge[u][v](u->v连边),求解时按照最长路进行求解(松弛的时候和原来相反)

权值为正的时候还可以用dijkstra

posted @ 2018-04-07 16:53  _努力努力再努力x  阅读(356)  评论(0编辑  收藏  举报