标签:最小值 不等式 splay 问题 最小 遇到 最短路 spl 实现
差分约束系统应该是一个比较有用的算法。它建立在图的思想上,常与最短(长)路算法一起出现。
下面是一组不等式:
\[A-B≥5\tag{①}\]
\[B-E≥7\tag{②}\]
\[A-E≥6\tag{③}\]
\[D-A≥9\tag{④}\]
\[B-C≥6\tag{⑤}\]
\[C-E≥2\tag{⑥}\]
现在问你一个问题:\(A-E\)的最小值是多少?
其实在这组不等式中,我们有很多方法得到一个形如\(A-E≥x\)的式子:
第一种方法:由③式直接得\(A-E≥6\)
第二种方法:①+②得\(A-E≥12\)
第三种方法:①+⑤+⑥得\(A-E≥13\)
因此,我们可以求出答案:\(A-E\)的最小值是13。
通过我们刚才的解题步骤,我们可以总结归纳出一个解决该类问题的通用方法,也就是差分约束系统。
我们刚才通过\(A-B≥5\)、\(B-C≥6\)、\(C-E≥2\)来求出了\(A-E≥13\),仔细观察可以发现,相邻的两个式子中都有一个相同的字母,而我们正是借助了这个字母来实现转移的。
是不是有一种熟悉的感觉?
这不就是最长路径嘛!
没错,对于一个类似于\(A-B≥x\)的式子,我们可以从\(B\)向\(A\)连一条有向边,且这条边的边权为\(x\)。
这样,对于上面这个问题,我们只需求出\(E\)至\(A\)的最长路即可。
对于\(A-B≥x\)的式子,我们是从\(B\)向\(A\)连边求最长路,而对于\(A-B≤x\),则需从\(A\)向\(B\)连边求最短路。
有一个要注意的地方,就是一张图你的式子要么全是\(A-B≥x\)的形式,要么全是\(A-B≤x\)的形式,不然你就无法用差分约束系统来求解答案了。
那么如果题目中给出多种式子呢?就不能用差分约束系统了吗?
不然,其实我们可以将这些式子全部转化为同一种式子(\(A-B≥x\)或\(A-B≤x\),下面以\(A-B≥x\)为例):
这样,遇到给你一些不等式,请你求出两数之差的最大(最小)值的问题,就可以轻松解决了。
标签:最小值 不等式 splay 问题 最小 遇到 最短路 spl 实现
原文地址:https://www.cnblogs.com/chenxiaoran666/p/Constraint.html