差分约束

差分约束是用来解形如 $x_1-x_2\leqslant k$ 的若干个方程的算法

我们发现可以将方程移项成 $x_1\leqslant x_2+k$解方程的时候考虑建图$x_2$$x_1$ 连一条长度为 $k$ 的边然后对这张图建一个超级源点向所有点连一条长度为 $0$ 的边最后跑最短/最长路得出的 $dis$ 就是每个变量的一个取值

为什么这样做是对的呢因为如果有一条 $u$$v$ 的长度为 $w$ 的边那么跑完最短路以后 $dis_v$ 一定不大于 $dis_u + w$恰好满足一个方程那么将所有边连上以后再跑最短路就可以满足所有方程最长路同理

另外如果有负环则无解

时间复杂度 $\Theta(\rm SPFA)$

需要注意的是最短路求的是以起始点为基准的最大解而最长路求的是以起始点为基准的最小解