差分约束系统
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 无解
相关文章推荐
- 第十六周项目4:阅读下面的程序,指出其功能(1)
- JSP中的MIME
- 第十六周项目3:查看下面程序的输出结果,并解释为什么
- 从古希腊神话说起,讲讲英语里的偏旁部首
- Cocos2d-Lua之运算符
- 第十六周项目2:阅读并运行程序,分别用记事本和二进制文件阅读器阅读(2)
- sws_scale YV12转RGB24图像倒转问题
- Linux系统调用
- 实现判断一组数据是否为可逆素数
- 第十四周上机实践项目1(1):阅读程序
- Ubuntu16.04安装/卸载Atom
- 从2016/6/15日开始整理遇到的异常
- 两个对象比较重写equals
- 算法入门-打印蛇形数组
- Unique Paths II
- phpcms v9表单向导中怎么加入验证码
- ACL 2016 Accepted Papers 会议论文
- 软件发布之怪现状
- js函数(类)的继承机制的设计与实现(五)
- 图的搜索+回溯-Seeding(zoj 2100 )