poj 1716 1201 差分约束 SPFA

poj 1716 Integer Intervals     

      因为没提无解,就当是保证有解吧。为了方便,先把点的标号都加一。约束条件有三个。

      (1)题目对区间的要求用前缀和表示  S[b+1]-s[a]>=2

      (2)前缀和本身隐含一个约束条件     S[i]-S[i-1]>=0

      (3)一个数字只取一次                     S[i]-S[i-1]<=1

      因为我想用SPFA求最短路,所以把不等式全部变形为 S[x]-S[y]<=C 的形式,从y向x连一条边权为C的边。输出那段随便写的,还没想,为什么(dis[maxn]-dis[0])和(dis[t]-dis[s])之间有矛盾。

      一点关于差分约束的想法,首先要确定使用求最长路还是最短路算法,如果用最短路算法,松弛操作对于边(v,u)有dis[u]=min(dis[u],dis[v]+w),所以算法结束后一点有dis[u]<=dis[v]+w,即dis[u]-dis[v]<=w。就是说求其他点到其实点满足约束条件最小值,应该把约束条件写成<=形式,求最短路。求指正。

Code

poj 1201 Intervals

      贴代码

Code

原文地址:https://www.cnblogs.com/lijianlin1995/p/3386368.html