差分约束

今天学姐讲课,lkp大佬神犇附体,成为了一秒切题真男人

传送门

我感觉我自己都不会

引例

给定n个变量和m个不等式,每个不等式形如 x[i] - x[j] <= a[k],求 x[n-1] - x[0] 的最大值。
(0 <= i, j < n)
例:n=4
1735167-20190717114113128-1073663816.png

然后经过认真的瞎搞计算就变成了这个鸭子:

1735167-20190717114332427-167757646.png

我们会发现这个东西移项之后有没有和spfa的松弛操作十分的相似(我也不知道是怎么看出来的
spfa的松弛操作:
如果d[u] + w(u, v) < d[v],
则更新d[v] = d[u] + w(u, v);

然后再随便的瞎搞一下,就能把图画出来了...

1735167-20190717114848192-1470581823.png

正题(差分约束)

一、我们可以从数形结合的方式来看

从数形结合上看的定义如若一个系统由n个变量和m个不等式组成,并且这m个不等式对应的系数矩阵
中每一行有且仅有一个1和-1,其它的都为0,这样的系统称为差分约束( difference constraints )系统。
1735167-20190717142111255-1006471023.png
然后这张图就可以变成一个每行只有一个1和-1其余都是0的矩阵
1735167-20190717142144187-665006798.png

乱搞操作:

x[i] - x[j] <= a[k]
x[i] <= x[j] + a[k]
令a[k] = w(j, i), 则x[i] <= x[j] +w(j,i)
令 i = v, j = u,d=x
d[v]<=d[u]+w(j,i)

SPFA中的一个松弛操作:
if(d[u] + w(u, v) < d[v]) d[v] = d[u] + w(u, v);
即力使d[u]+w(u,v)>=d[v] ;

对于每个不等式 x[i] - x[j] <= a[k],对结点 j 和 i 建立一条 j -> i的有向边,边权为a[k],求x[n-1] - x[0] 的最大值就是求 0 到n-1的最短路。

二、可以从三角不等式上看

1735167-20190717142411551-1810369395.png
然后我们就可以转化成三角不等式上来了...
1735167-20190717142425710-1750258785.png
我们想要知道C - A的最大值,通过(1) + (2),可以得到 C - A <= a + c,所以这个问题其实就是求min{b, a+c}
三角不等式推广到m个,变量推广为n个,就变成n个点m条边的最短路问题.

三、判断是否有解:

最短路,会出现负权圈或者根本就不可达的情况,所以在不等式组转化的图上也有可能出现上述情况
,差分约束系统的解有三种情况:1、有解;2、无解;3、无限多解;

1、x[t]-x[s] 最大值不存在

1735167-20190717142722837-1398432481.png

自己yy一下就好了啦

2、x[4]-x[1] 最大值无限大

1735167-20190717142817790-671057192.png
因为两边都不相连,然后你自己吧那个不等式写出来之后会发现,如果你约一下分,那么会出现一个恒等式

四、最小值问题

1735167-20190717142956706-126859704.png

如果我们把不等式的符号改变一下那么求得最短路那不就是变成了最长路问题吗,那么我们在做题的时候
只需要把spfa中的松弛操作的符号变一下就行了....

五、不等式的标准化

如果给出的不等式有"<="也有">=" :

如果需要求的是两个变量差的最大值,那么需要将所有不等式转变成"<="的形式,建图后求最短路;
相反,如果需要求的是两个变量差的最小值,那么需要将所有不等式转化成">=",建图后求最长路。

如果有形如:A - B = c 这样的等式呢?

我们可以将它转化成以下两个不等式:
A - B >= c (1)
A - B <= c (2)
再通过上面的方法将其中一种不等号反向,建图即可。

如果这些变量都是整数域上的,那么遇到A - B < c这样的不带等号的不等式怎么办呢?

我们可以将它转化成"<="或者">="的形式,即 A - B <= c - 1形式就可以做了...

奉上几个练习题

线性约束 T1 不会的点这里

区间约束 T2 不会的点这里

一堆杂题

hdu 3592 World Exhibition ★★☆☆☆ 差分约束系统 - 最短路模型 + 判负环
hdu 3440 House Man ★★☆☆☆ 差分约束系统 - 最短路模型 + 判负环
poj 1364 King ★★☆☆☆ 差分约束系统 - 最长路模型 + 判正环
poj 1932 XYZZY ★★☆☆☆ 最长路 + 判正环
hdu 3666 THE MATRIX PROBLEM ★★★☆☆ 差分约束系统 - 最长路模型 + 判正环
poj 2983 Is the Information Reliable? ★★★☆☆ 差分约束系统 - 最长路模型 + 判正环
poj 1752 Advertisement ★★★☆☆ 限制较强的差分约束 - 可以贪心求解
hdu 1529 Cashier Employment ★★★☆☆ 二分枚举 + 差分约束系统 - 最长路模型
hdu 1534 Schedule Problem ★★★☆☆ 差分约束系统 - 最长路模型
ZOJ 2770 Burn the Linked Camp ★★★☆☆
hdu 4109 Instrction Arrangement ★★★☆☆

转载于:https://www.cnblogs.com/zzz-hhh/p/11200893.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值