差分约束系统的粗浅总

前些日子,看了下这个差分约束系统,今天刷了几道题目,就稍微总结下。

有x1,x2,x3.....xn这些未知量,出现一系列xi-xj<=k(k是常量,题目给出)的不等式,问这些等式有没有解,或者求xn-x1的最大值(最小值)。就可以向差分约束系统方面考虑。

附注:有时候是给出xi-xj>=k,那就转化成xj-xi<=-k。有时候给xi-xj=k,那就转成xi-xj>=k并且xi-xj<=k。有时候给xi-xj<k,因为处理不了这种没有等于的,如果是整数就转成xi-xj<=k-1,反正就是要令所有的不等式统一符号(就是全部大于等于或者全部小于等于)。

第一种:如何判断这些等式是否有解,把所有不等式转换成xi-xj<=k的形式后,对每个xi-xj<=K,点j向点i连一条边权为k的边(单向边),建立图后,看情况考虑要不要设立一个源点s,让点s连向其他所有的点(单向边),边权0,对点s跑一次spfa,看看是否会出现负环(如何利用spfa判负环参考大白书)。出现负环无解,否则有解。想想看,其实出现负环就相当把几个等式相加,然后出现了0<=负数的情况。

第二种: 求xn-x1的最大值,全部转换成xi-xj<=K的形式,然后设源点x1的值为0,然后以x1为源点跑spfa求最短路(初始化其他xi=INF)求出xn。
 
第三种:求xn-x1最小值,全部转换成xi-xj>=k形式,设X1=0,以x1为源点跑spfa求最长路(初始化其他xi=-INF),求xn。

例题:

poj1324,

有一个序列S={a1,a2,a3,....,am},现在给出一些不等式

使得ai+a(i+1)+a(i+2)+.......+a(i+ni)>ki或者ai+a(i+1)+a(i+2)+.......+a(i+ni)<k。(注意这里是从ai本身开始后面再加ni个数),让你判断是否所有的不等式都满足条件,满足就输出 lamentable kingdom,不满足就输出successful conspiracy。

ai+a(i+1)+a(i+2)+.......+a(i+ni)>ki转换成ai+a(i+1)+a(i+2)+.......+a(i+ni)>=ki+1转换成sum[i+ni]-sum[i-1]>=ki+1转换成sum[i-1]-sum[i+ni]<=-1-ki

ai+a(i+1)+a(i+2)+.......+a(i+ni)<ki转换成ai+a(i+1)+a(i+2)+.......+a(i+ni)<=ki-1转换成sum[i+ni]-sum[i-1]<=ki-1

然后像上面我说的那样建立图,然后spfa跑看看是否出现负环,是的话就无解,否则有解。


POJ3159

有一批糖果要由班长flymouse分发给班里的小朋友,给出m对数据u,v,w,表示第u个小朋友不能比第v个小朋友少w个,但flymouse与snoopy不和,所以在满足上述约束的条件下,flymouse要尽量比snoopy多。而对于其他小朋友而言,则只希望自己得到的糖果不少于班上某某其他人就行了。
分析:
因此根据题意,可以列出如下的不等式:Sbi-Sai<=ci(1=<i<=n)   最终要使得Sn-S1最大。
那就是我上面我总结的第二种。

poj2983(题意略)
第一种,不过有个关于等号的处理,题目给xi-xj=k,那就是转换成同时满足xi-xj<=K,xi-xj>=K(第二个转换xj-xi<=-k)

poj3169挑战有,省略。
poj1201,1716是第3种,注意sum[i+1]-sum[i]<=1的情况!








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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值