浅谈差分约束
差分约束
什么是差分约束?
是一种特殊的元一次不等式组,它包含个变量以及个
约束条件
,每个约束条件是由两个其中的变量做差
构成的。
形如,其中 并且是常数(可正可负)。
约束条件可以变形
这就很像图论中的求最短路不等式
因此,我们可以把每个变量看做图中的一个结点
,对于每个约束条件,看作从结点向结点连一条长度为的有向边。
如果是该差分约束系统的一组解,那么对于任意常数,显然也是该差分约束系统的一组解,因为这样做差后会被消掉。
设并向每一个点连一条权重为0的边,跑单源最短路,若途中存在负环,则给定的差分约束系统无解,否则,为该差分约束系统的一组解。
差分约束最难的地方在于找不等关系
有什么用?怎么用?
一、求不等式组的可行解
源点需要满足的条件:从
源点
出发,一定可以走到所有的边
求一组解,使得所有的约束条件
得到满足,否则判断出无解。
步骤:
- 先将每个不等式,转换成一条从走到,长度为的边。
- 找到一个
超级源点
,使得该源点一定可以走到所以边
- 从源点求一遍
单源最短路
结果1:如果存在负环
,则原不等式组一定无解
结果2:如果没有负环
,则就是原不等式组的一个可行解
二、如何求最大值
或者最小值
,这里的最值指的是每个变量的最值
结论:如果求的是最小值
,则应该求最长路
;如果求的是最大值
,则应该求最短路
问题1:如何转换,其中是一个常数,此类的不等式
方法:建立一个超级源点0
,然后建立0 -> i
的边,长度是c
的边即可
以求的最大值为例:
所有从出发,构成的不等式链
所计算出的上界
,最终的最大值等于所有上界的最小值
。
如这个例子中,的最大值为5
转换为图论问题,就是求的最小值
,即最短路求解
求的最小值
时则相反,通过不等式链计算出下界,最终在所有下界中取最大值
转换为图论问题就是求得最大值,即最长路求解
参考文献:
OI Wiki差分约束
__EOF__

本文作者:Zhicheng
本文链接:https://www.cnblogs.com/L-zhicheng/p/16211148.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/L-zhicheng/p/16211148.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!