解决形如 \(x_i-x_j\leq k\) 的不等式组的方法。
可以观察到最短路算法中每个边权值都满足三角形不等式 \(d_v\leq d_w+w\),所以可以通过最短路算法得到不等式组的解。
连边方式:
- \(x_i-x_j\leq w\):j 向 i 连一条长度为 w 的边。
- \(x_i-x_j\geq w\) 可以变形,则 i 向 j 连一条长度为 -w 的边。
- \(x_i-x_j=w\) 可以变形为上述两个不等式同时成立。
注意,这里的连边方式是基于最短路算法得到的,我们同样可以利用最长路算法解决,只不过要调整连边方式。
注意,为了得到一个统一的解,需要建立一个 超级源点,这样也可以同时控制解的正负性。若跑最短路,可以得到 \(x_i\leq0\) 的最大解;若跑最长路,可以得到 \(x_i\geq0\) 的最小解。
例题:
P5960 【模板】差分约束
P3385 【模板】负环 ——注意,加入了超级源点后要判断入队次数大于 n+1 次。