差分约束
简单记一下吧。
差分约束大致有两种建图方式:
- \(x \to y\) 表示 \(y\) 至少比 \(x\) 大 \(v\)。
此时符合 \(d_y \ge d_x + v\)。此时应该跑最长路,跑出来的结果为每个点最少是多少。
- \(x \to y\) 表示 \(y\) 至少比 \(x\) 小 \(-v\)。
此时符合 \(d_y \le d_x + v\)。此时应该跑最短路,跑出来的结果为每个点最大是多少。
列出式子以后可以统一转化为其中的一种(如 \(d_y \ge d_x + v\) 可以转化为 \(d_x \le d_y - v\)),然后 \(O(nm)\) 跑 SPFA。出现负环无解。如果边权均为非负数则可以 \(O(m \log n)\) 用 Dijkstra 跑。得到的 dis 数组记为一组答案。