差分约束系统

来源:互联网 发布:远景能源 张雷 知乎 编辑:程序博客网 时间:2024/06/07 16:51

定义

由n个变量和一系列形如xixj<=k(k是常数)的不等式组成的系统称为差分约束系统。

求解

分析最短路模型,我们会发现求得最短路(将i的最短路设为dis(i))之后,对于任何边(设为x->y长度为z),都有:
dis(x)+z>=dis(y)
这感觉怎么这么眼熟呢……
dis(y)dis(x)<=z
然后我们就惊奇的发现最短路和差分约束系统竟有异曲同工之妙!

所以我们对于xixj<=k,构造一条j->i的长度为k的边,然后随便乱刷最短路(起点乱给+初值乱给:P,因为根据上面的分析我们知道只要是最短路就是满足的)就是一组可行解。举个例子:
x1x2<=1
x3x2<=3
x3x4<=1
x4x5<=4
建完图,我们令1是起点,且dis(1)=0,其余=INF:
这里写图片描述
红色的数字即为最短路,大家可以自行验证这组解的正确性。我们还可以发现,一组可行解均加上一个相同的实数,依然还是可行解(这个很显然)。

但我们好像忽略了一种特殊的情况:无解。来看:
x1x2<=1
x2x1<=2
这组数据显然会掉进负环里:
这里写图片描述
这其实就对应了无解,因为最短路不存在,意味着解也不存在了。

差分约束系统的求解其实很简单(最短路菜鸡都会打好吗?),最重要的是转化和建图。

特殊解

求解查分约束系统特殊解好像有三个套路:
1.令所有点的dis=k(k是常数,一般给0),这样求出来的解就比较接近。
2.令随便一个点x的dis=0,其他给INF,这样求出来的解与x的差距就较大。
3.令随便一个点x的dis=0,其他给-INF,求最长路,这样求出来的解与x的差距就较小。
正确性好像比较显然,但是并不会严格证明啊QAQ。