差分约束系统

解决形如 \(x_i-x_j\leq k\) 的不等式组的方法。

可以观察到最短路算法中每个边权值都满足三角形不等式 \(d_v\leq d_w+w\),所以可以通过最短路算法得到不等式组的解。

连边方式:

  1. \(x_i-x_j\leq w\):j 向 i 连一条长度为 w 的边。
  2. \(x_i-x_j\geq w\) 可以变形,则 i 向 j 连一条长度为 -w 的边。
  3. \(x_i-x_j=w\) 可以变形为上述两个不等式同时成立。

特殊:

  1. \(x_i<x_j\) 可以表示为 \(x_i+1\leq x_j\)
    同理
  2. \(x_i>x_j\) 可以表示为 \(x_i\geq x_j+1\)

注意,这里的连边方式是基于最短路算法得到的,我们同样可以利用最长路算法解决,只不过要调整连边方式。

注意,为了得到一个统一的解,需要建立一个 超级源点,这样也可以同时控制解的正负性。若跑最短路,可以得到 \(x_i\leq0\) 的最大解;若跑最长路,可以得到 \(x_i\geq0\) 的最小解。

显然,如果将一组合法解整体平移,得到的结果也是合法的。

例题:
P5960 【模板】差分约束
P3385 【模板】负环 ——注意,加入了超级源点后要判断入队次数大于 n+1 次。
P1993 小 K 的农场

posted @ 2023-11-13 20:38  21_devoted  阅读(15)  评论(0)    收藏  举报