差分约束系统

差分约束系统

一开始并不知道差分约束是什么东东,直到最近做到了一道题,才知道这是什么。
差分约束可以说是有 n 个形如 xi - xj < b 的条件的约束,问关于 x 这个方程组的可行解。

我们把每一个形如 xi - xj < b 的条件变成 xi +(- b )< xj ,有没有发现这不等式很熟悉,这不就是跑最短路时的最小值的更新条件吗?把所有的 xi xj 连一条权值为(- b )的边,定义一个源点,从源点向全部定点连上一条权值为0的边,然后做一遍最短路。

做最短路的过程其实就是沿着某条从源点把权值和累加求出某个 xi 得极值,如果发现某两组点 xi xj 不满足约束条件 xi - xj < b 就等价于在极值情况下都无法满足,那就是说明该关于 x 的这个方程组没有可行解。

查分约束系统的问题可以出得很灵活,可能约束条件会变成 xi - xj <= b xi - xj >= b ,如果是 xi - xj > b 就是做一遍最长路类似的东西。反正无论怎么变,只要把更新条件弄出来就好了。

伪代码(SPFA)

while循环

v=当前队头
for each edge (u,v) 属于 E do
if d[u] > d[v]+w(u,v) 则
begin
    更新d[u]
    u入队
end
释放节点


Checking
for each edge (u,v) 属于 E do
if d[v]> d[u] + w(u,v) then 无解

你可能感兴趣的:(差分约束系统)