Description
和人一样,牛也喜欢站得离朋友较近的位置。FJ有N(2<=N<=1,000)头牛,编号为1..N,现在要设计一个顺序让他们站成一排给他们喂食。奶牛们按照编号顺序依次站立,允许有多只牛站在同一位置(也就是说,牛i和牛j(i<j)的站立位置s_i,s_j一定满足s_i<=s_j,如果s_i=s_j,那么编号为i到j之间的牛也一定站在s_i处)。
有一些牛相互喜欢,希望两人的距离在某个范围内,同样也有一些牛相互不喜欢,希望两人的距离大于等于某个距离,题目中给出ML(1<=ML<=10,000)个限制描述相互喜欢的情况,给出MD(1<=MD<=10,000)个限制描述相互不喜欢的情况。
你的任务是计算,如果存在某种方案满足上述要求,输出1号牛和N号牛之间最大距离。
Input
第1行:3个空格隔开的整数N,ML,MD。
第2到ML+1行:每行包含3个空格隔开的整数A,B和D,满足1<=A<B<=N,表示牛A和牛B之间的距离不得超过D(1<=D<=1,000,000)。
第ML+2到ML+MD+1行:每行包含3个空格隔开的整数A,B和D,满足1<=A<B<=N,表示牛A和牛B之间的距离至少为D(1<=D<=1,000,000)。
Output
如果不存在这样的方案,输出-1,如果牛1和牛N之间的距离可以任意,输出-2,否则输出最大的距离。
Sample Input
4 2 1
1 3 10
2 4 20
2 3 3
Sample Output
27
Data Constraint
Hint
【样例说明】
最佳方案是1到4号牛依次放置于位置0,7,10,27
解题思路:这道题目是个差分约束系统,由题我们可以得知,这个有向图中,由题b-a<=k1,c-b<=k2,得出c-a<=k1+k2,因此比较k1+k2和k3的大小,求出最小的就是c-a的最大值了
根据以上的解法,我们可能会猜到求解过程实际就是求从a到c的最短路径,简单的说就是从a到c沿着某条路径后把所有权值和k求出就是c -a<=k的一个
推广的不等式约束,既然这样,满足题目的肯定是最小的k,也就是从a到c最短距离,
那么这道题目就是一个有负权值的最短路径,那么我们使用SPFA算法,在读入md里的A、B、D时,我们使用将D换成-D就好了,然后跑一遍SPFA,递归一下到点1~n是否有点的个数被到达次数是否大于等于n,是的话输出1,不是的话再判断能否到达点n,不能输出-2,否则输出最大距离