差分约束浅谈
还是挺难的一个东西。
引入
考虑一个限制 A i ≤ x i + C i A_i \le x_i + C_i Ai≤xi+Ci 其中 x i x_i xi 是一个给定的值。
A , C A, C A,C 表示两个位置之间的关系。
发现对于同一个 A i A_i Ai 总共有若干个限制,那么也就是意味着 A = min i ( x i + C i ) A = \min_i(x_i + C_i) A=mini(xi+Ci)。
发现这个东西就是最短路的更新。
我们换一种角度来思考,对于每一个 C i C_i Ci 其对应的限制就是 C i ≥ A i − x i C_i \ge A_i - x_i Ci≥Ai−xi 也就是意味着 C i = max ( A i − x i ) C_i = \max(A_i - x_i) Ci=max(Ai−xi) 这个就是最长路了。
所以说在题目没有给一些限制的时候我们可以将最长路和最短路相互转换。
实现
常说这个东西是需要使用 S P F A \tt SPFA SPFA 的,事实上 F l o y d , D i j k s t r a \tt Floyd, Dijkstra Floyd,Dijkstra 也是完全可以的,最主要的问题是

差分约束系统是一个复杂的概念,涉及最短路和最长路问题。通过转换,可以将最短路问题转化为最长路问题。在实现中,SPFA、Floyd或Dijkstra算法都能用于解决此类问题,而负环的存在性可以通过点的入队次数判断。常见的应用包括乘法化加法、天平问题和图的负环识别,解决这些问题需要根据题目的需求选择最大解或最小解。
最低0.47元/天 解锁文章
585

被折叠的 条评论
为什么被折叠?



