差分约束系统可以看成是线性规划的一种特殊情况,可以通过归约到图论中的最短路问题求解。
形式
差分约束系统是若干形如 (Xi−Xj≥Ck) 的二元差分不等式组成的约束条件,对于差分约束系统的问题,通常是让你求其中两个变量差值的最小值 min(Xi−Xj) 或最大值 max(Xi−Xj) .
求最小值
求一个变量 Xi 比另一个变量 Xj 至少大多少的问题
这种问题可以由大于的传递性分解为若干约束条件:
a至少要比b大c. (a−b≥c)
而在最短路径问题中的边(x指向y,权值为w)的含义是y的距离最多比x大w.
“y的距离最多比x大w” (dist[y]≤dist[x]+w) n ⇐⇒ “x至少要比y大-w” (dist[x]≥dist[y]−w)
所以约束条件 (a−b≥c) :a至少要比b大c等价于 “b的距离最多比a大-c”也就是a指向b权值为-c
可以通过大于的传递性得到一个变量 Xi 比另一个变量 Xj 至少大多少也就是 min(Xi−Xj)=max(∑c) ,
但路径上的权值加起来是 (−∑c) 。要求 (∑c) 的最大值就是路径 (−∑c) 的最小值再取相反数就行了,最短路算法计算的过程中 Xi 作为源点.
求最大值
而对于求一个变量 Xi 最多比 Xj 大多少的问题
同理,可以分解为若干约束条件 (a−b≤c) ,意思是a最多比b大c,也就是b指向a权值为c一个变量 Xi 最多比 Xj 大多少也就是 max(Xi−Xj)=min(∑c) ,这样就是求从 Xj 出发到 Xi 的最短路径
归纳
求最小值
min(Xi−Xj)
:转化成
(a−b≥c)
形式的约束不等式
求最大值
max(Xi−Xj)
:转化成
(a−b≤c)
形式的约束不等式
- 关于是求最短路径和最长路径的问题,其实两者可以看成等价的。最长路可以看成是边权取反后(方向不变)最短路的相反数
- 以哪个点作为源点也是可以灵活选择的,若当前是求 Xi 作为源点的最短路,那么可以把每条边的方向反向,权值不变,就变成了以 Xj 作为源点的最短路
- 注意:在求最长路的时候,图中除源点外的所有结点初始dis为-INF
判断是否成环
对与是否成环的问题,通常的做法是新建一个结点指向所有结点并且权值为0
应用
先做区间和处理再建模
POJ 2983 Is the Information Reliable
spfa判负环
需要用dijstra或Dfs版的spfa,bfs+spfa会超时
较为复杂的差分约束题