差分约束

简单记一下吧。

差分约束大致有两种建图方式:

  • \(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 数组记为一组答案。

posted @ 2020-10-04 16:21  JiaZP  阅读(148)  评论(0编辑  收藏  举报