差分约束算法总结
来源:互联网 发布:登录淘宝网网站 编辑:程序博客网 时间:2024/06/05 19:28
差分约束系统
一、概念
二、引例
三、差分约束与最短路模型
1、与最短路模型的联系
先给出结论:求解差分约束系统,都可以转化成图论的单源最短路径(或最长路径)问题。
我们观察上面例子中的不等式,都是x[i] - x[j] <= a[k],可以进行移项,成为x[i] <= x[j] + a[k],我们令a[k] = w(j, i),dis[i]=x[i],并使i=v,j=u,那么原始就变为:dis[u]+w(u,v)>=dis[v],于是可以联想到最短路模型中的一部分代码
if(dis[u]+w(u,v)<=dis[v]){ dis[v]=dis[u]+w(u,v);}
这不正与松弛操作相似吗?
但是好像不等号方向刚好相反,但其实这并不矛盾
上面的代码要实现的是使dis[u]+w(u,v)>dis[v],而对于不等式,我们进行建边的操作:对于每个不等式 x[i] - x[j] <= a[k],对结点 j 和 i 建立一条 j -> i的有向边,边权为a[k],求x[n-1] - x[0] 的最大值就是求 0 到n-1的最短路,两者刚好吻合。所以求解差分约束问题就转化为了最短路问题。
2.问题解的存在性
由于在求解最短路时会出现存在负环或者终点根本不可达的情况,在求解差分约束问题时同样存在
(1)、存在负环
如果路径中出现负环,就表示最短路可以无限小,即不存在最短路,那么在不等式上的表现即X[n-1] - X[0] <= T中的T无限小,得出的结论就是 X[n-1] - X[0]的最大值不存在。在SPFA实现过程中体现为某一点的入队次数大于节点数。(貌似可以用sqrt(num_node)来代替减少运行时间)
(2)、终点不可达
这种情况表明X[n-1]和X[0]之间没有约束关系,X[n-1] - X[0]的最大值无限大,即X[n-1]和X[0]的取值有无限多种。在代码实现过程中体现为dis[n-1]=INF。
3、不等式组的转化
做题时可能会遇到不等式中的符号不相同的情况,但我们可以对它们进行适当的转化
(1)方程给出:X[n-1]-X[0]>=T ,可以进行移项转化为: X[0]-X[n-1]<=-T。
(2)方程给出:X[n-1]-X[0]<T, 可以转化为X[n-1]-X[0]<=T-1。
(3)方程给出:X[n-1]-X[0]=T,可以转化为X[n-1]-X[0]<=T&&X[n-1]-X[0]>=T,再利用(1)进行转化即可
4、应用
对于不同的题目,给出的条件都不一样,我们首先需要关注问题是什么,如果需要求的是两个变量差的最大值,那么需要将所有不等式转变成"<="的形式,建图后求最短路;相反,如果需要求的是两个变量差的最小值,那么需要将所有不等式转化成">=",建图后求最长路。
5、相关题目链接
(1)、POJ 1716 Integer Intervals
(2)、HDOJ 3666 THE MATRIX PROBLEM
- 差分约束算法总结
- 差分约束算法总结
- 差分约束 总结
- 【算法】差分约束系统
- 差分约束系统总结
- 差分约束系统总结
- 差分约束小小总结
- 差分约束系统总结
- 差分约束系统总结
- 差分约束系统+spfa算法 poj1201
- |算法讨论|差分约束 学习笔记
- 差分约束与SPFA算法
- (uva11671)差分约束问题总结
- 从【poj1275/HDU1529】总结差分约束
- 【图-差分约束】 差分约束
- 差分约束系统
- 差分约束系统
- 差分约束系统
- Linux中的关机与启动
- 用于从后台返回值的多选的选中
- IOS基础控件 Layer swift3.1
- 学习使用greys排查线上问题
- 虚拟主机常见免费问题解答!
- 差分约束算法总结
- Mybatis和Hibernate的比较
- m6d3周总结
- 184.m1-DrawerLayout实现抽屉拉动效果
- 链表笔记_临时
- SpringMVC接受多个同类型对象最佳实践
- 绿色版电脑站手机站仿站小工具
- win10 设置默认输入法为英文,ctrl +shift切换中文
- ColumnListHandler:将结果集中某一列的数据存放到List中。