差分约束系统是一种特殊的N元一次不等式组,它包含N个变量X1~Xn以及M个约束条件,每个约束条件都是由两个变量做差构成,形如Xi-Xj<=Ck,其中Ck是常数(可以是负数也可以是非负数),1<=i,j<=N,1<=k<=M.我们要解决的问题是求一组解,X1=a1,X2=a2,X3=a3,…,XN=aN,使得所有条件都得以满足。
差分约束系统的每一个约束条件Xi-Xj<=Ck可以变形为Xi<=Xj+Ck。这与单源最短路问题中的三角不等式dist[y]<=dis[x]+z非常相似。因此可以把每个变量Xi看作有向图中的一个结点i,对于每一个约束条件Xi-Xj<=Ck,从节点j到i的一条长度为Ck的有向边。
注意到,如果{a1,a2,…,an}为一组解,那么对任意的常数d,{a1+d,a2+d,…,an+d}也是一组解(做差后d正好被消掉)。
设dist[0]=0,以0为起点求单源最短路。若图中存在负环,则给定的差分约束系统无解。否则,Xi=dist[i]就是差分约束系统里的一组解。
在某些题目中,约束条件为形如Xi-Xj>=Ck.我们仍看作是从j到i连成长度为Ck的有向边,只是改为计算单源最长路,如图中存在正环则无解。当然我们也可以把约束条件转换成Xj-Xi<=-Ck,再按照单源最短路进行计算。
差分约束系统----最短路径算法的应用
最新推荐文章于 2021-04-06 18:52:59 发布