蒟蒻刚好在学查分约束,为了满足自己的好奇心点了进来….
咳咳切入正题,这题是用差分约束的(废话)
那么差分约束是什么呢,(前置知识——>最短路(SPFA P3371) ),我们得到一串不等式(不等式应该不用补充了吧…)
形如 a-b>=c,b-a<=c balabala…
敲黑板
那么对于这道题,我们是不是可以得到每个奶牛之间的距离不等式?
A 号奶牛与 BB 号奶牛之间的距离须 ≤D
分别把两头奶牛的位置换为dis[x]和dis[u],将e[i].weigh视为它们之间的那个D然后可以得到
dis[x]-dis[u]<=e[i].weigh
是不是很眼熟啊
对,就是SPFA中的松弛操作!
对于第二个限制,我们在不等式两边同时乘上-1,来使其变成<=的类型,
那么这道题就非常好做,
我们每次读入第一个限制,将限制看为边权,从第一个点连一条有向边至第二个点,
对于第二个限制,我们从第二个点连一条有向边至第一个点,求一遍最短路。那么dis[n]就是我们的答案啦。
坑点:可能这个图是不联通的,那就在每个点与0连一条虚边,那么就可以判断是否合法。
代码实际上不长(因为我是换行狂魔
1 |
|