差分约束系统(附习题洛谷P1250&P2294&P3275)
差分约束系统
差分约束是用图论中的最短路解决一些不等式(组)。
的长度为5的序列
怎么建图?拿第一个式子来说,
因为最短路的性质:
为了图的连通性最后再新建一个超级源,连到每个结点,长度是0
(即
从超级源跑单源最短路,满足这一系列不等式的的序列就是最后的
如果是
所以最后的方法是:
题目中还会有别的隐含条件,例题中会出现
求解最短路(最大值)时的无解情况
①存在负环
如果路径中出现负环,就表示最短路可以无限小,即不存在最短路,那么在不等式上的表现即
②终点不可达
这种情况表明
应用
如果需要求的是两个变量差的最大值,那么需要将所有不等式转变成"<="的形式,建图后求最短路.(即求所有满足条件里的最小的)
相反,如果需要求的是两个变量差的最小值,那么需要将所有不等式转化成">=",建图后求最长路。(即要求所有的最小值都满足)
洛谷P1250
转换完,就可以用上面的方法求解了:
先乘-1,转换成Sum(l-1) - Sum(r) <= -T
还有两个条件,即:
即每个位置最多种一棵树
Sum(i-1) - Sum(i) <= 0
差分约束规定的只是元素的相对关系,按照题意 相对关系不变时最后的答案尽可能小,所以让
洛谷P2294
题目中给定
则同时从
题目要求判断是否成立,即判断是否有环。
洛谷P3275
题目要求每个小孩至少有一个糖果,所以从超级源到每个点连一条边权为1的边。
然后就按照题目给的方式式子就行。
无解就是有环。
两个要注意的点:
1.宽搜超时了一个点,改深搜更新最长路同时判环。
2.特殊数据卡一个点:从超级源向外连边时,倒着:
for(LL i=n;i>=1;i--)
add(0,i,1);
意思是有可能环在最后,而先走完前边才能搜到环,倒着加边,就可以一上来就搜到环(这个只与数据有关,不用特别在意,毕竟听说差分约束不是这个题的正解)。