您的位置:首页 > 其它

差分约束系统

2016-06-15 19:44 274 查看

差分约束系统

一开始并不知道差分约束是什么东东,直到最近做到了一道题,才知道这是什么。

差分约束可以说是有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 无解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: