差分约束简述
来源:互联网 发布:ssd优化工具 编辑:程序博客网 时间:2024/06/05 17:58
差分约束也是一个各种算法的综合,
它用于解一系列的不等式(表示成a-b<=(>=)c的形式,即差分)
例如:
已知一连串约束
(1)x1 - x0 <= 2
(2)x2 - x0 <= 7
(3)x3 - x0 <= 8
(4)x2 - x1 <= 3
(5)x3 - x2 <= 2
然后求x3-x0的最大值
通过整理,我们可以整理出:
1.(3) x3 - x0 <= 8
2.(2)+(5) x3 - x0 <= 9
3.(1)+(4)+(5) x3 - x0 <= 7
因为要满足以上三个不等式,
所以x3-x0最大只能取min{7,8,9}=7
易知,所有不等式都是
x[i]-x[j] <= a[k] 的形式,
也就是x[i] <= x[j] + a[k]
看起来特别熟悉,像是SPFA(最短路径算法)中的松弛操作,
于是用dis来代替x,用w[i,j]替换a[k]
那么就变成dis[i] <= dis[j]+w[i,j],
而松弛操作则是若dis[i]>dis[j]+w[i,j],更新最短路,
而dis[i] <= dis[j]+w[i,j],即表示没必要进行松弛操作,也就是已经松弛完毕。
所以对于每个不等式x[i]-x[j] <= a[k],即可以视成点j向点i连一条有向边,权值为a[k]
求x[i]-x[j]的最大值则可以换成多条i~j的路径的最小值,即最短路径。
所有差分约束便可以转化成最短路径问题,
利用SPFA算法来解决最短路径问题,时间复杂度仅为O(kn)(k约为2)
但众所周知,不可能一定有解,还有更多的情况,如果要求的i和j
不连通,即代表i和j之间没有约束,那么可以取到无限大值。
如果存在负环,则说明最短路无限小,即不存在最短路。
也就是最大值不存在。
同样的,
x[i]-x[j]>=a[k]的形式也可以用最长路模型来求,
原因就让读者们来思考一下吧~
但前提是:
无论你想求最小值还是最大值,符号都要化成一样的。
最后,如果这些变量都是整数域上的,那么”>”,”<”,这些原本不能用差分约束解决的,便可以解决例如:
A-B < C ,则A-B <= C-1
模型就综上所述了
不过oi中的题目就并没有那么赤裸裸了,都会有一些掩盖,你必须找到当中的约束
1.线性约束,最简单的约束
例题:POJ 3169
提示:设第x个人的位置为d[x],那么。。(不透露)
别忘了相邻两点的约束关系
2.区间约束,关于区间的约束
例题:POJ 1201
提示:看起来貌似很复杂,但可以利用以前学过的前缀和方式来表示约束
3.未知条件的约束
例题:POJ 1275
提示:某些约束不等号右边的数不可知,那么就要通过二分答案的思想来寻找答案
- 差分约束简述
- 【图-差分约束】 差分约束
- 差分约束系统
- 差分约束系统
- 差分约束系统
- 差分约束系统
- POJ_1364_差分约束
- 差分约束系统
- 差分约束
- 差分约束 模板
- 差分约束系统
- 差分约束系统
- 差分约束系统
- Poj1275 差分约束
- 【差分约束系统】
- poj1364 差分约束
- hdu1534差分约束
- 差分约束
- Windows下Eclipse+PyDev安装Python开发环境
- Accurate Scale Estimation for Robust Visual Tracking code
- JavaScript笔记(一)
- Uva-12093 Protecting Zonk(较复杂的树形DP)
- RabbitMQ的消息路由基本讲解
- 差分约束简述
- 谁获得了最高奖学金
- Nagios
- 2015 ICCV以及ICCV Workshop中有关Action Units(AU)检测和Facial landmark检测的文章总结
- freemarker学习--语法
- 《Java高并发程序设计》学习 --7.10 多个Actor同时修改数据:Agent
- 1039字符消除
- Go学习笔记(四)基本数值类型
- ACM-称硬币