差分约束系统
我们可以把一个不等式,看做两个点和一条边,而边则是约束不等式的一个条件
距离 a - b >= c
那么 建边就是 a---c---b ,a b之间建立一条权值为 c 的边,然后我们还可以根据不等式的运算进行一部分约束
对于多个不等式组:
v(x1) - v(x2) >= c1
v(x2) - v(x3) >= c2
……
把它们加起来就会得到:v(x1) - v(xn) >= c1 + c2 + …… + cn-1
而对于所有的不等式,倘若我们满足了 >= 中的最大值,那么所有条件不也就都满足了吗
所以求v(x)-v(y)的最小值是在图上求最长路径。(摘自题解上某个巨巨的博客)
而题目中判断是否成立,也就是看一下这个差分约束系统是否存在一个矛盾,
首先所有数字大于0, 我们不妨建立一个 V(x) - 0 >= 0 把所有点和 0 连一条边就好了
只要求出所有不等式中的最小值,代表着这个系统可以被满足
但是如果光这么看,我们发现这个图就是一棵树。。没有完全连通,那么我们便在最后加一个辅助点,使得整个图变成连通的,
之后我们需要做的就是找一下整个图中的负环,因为一旦存在负环,说明这个系统内部出了问题,出现矛盾了,就不成立了,那么我们反向思路,只要找到一个正环,这道题不就有可成立的情况了吗。。
所以我们用 spfa 来跑一次求负环。。但是这道题被 卡了 tle 好几组数据。。最