差分约束
若s[a]-s[b]>=k 建一条b到a的长度为k的边
若 s[a]-s[b]<=k 建一条b到a的长度为-k的边
>= 是求最小值的最长路;
<=是求最大值的最短路;
注意到最短路算法的松弛操作:if (d[j] > d[i] + w[i][j]) d[j] = d[i] + w[i][j]。
这其中的三角形不等式:d[j] ≤ d[i] + w[i][j]简单变形就成了d[i] - d[j] >= -w[i][j]。这样就图形的最短路就维护了一个不等式组。所以,我们可以建立一个图:对于每一个不等式s[i] - s[j] >= c,就从j连一条指向i的边,其中边的权值c,这样求一个最长路,就是d[n] - d[-1]就是s[n] - s[-1]的最小值了,且对应的方案就是s[i] = d[i]。