#sPFAybttg030304. 1507:虫洞 Wormholes
1507:虫洞 Wormholes
1507:虫洞 Wormholes
题目描述
原题来自:USACO 2006 Dec. Gold
John 在他的农场中闲逛时发现了许多虫洞。虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前)。John 的每个农场有 条小路(无向边)连接着 (从 到 标号)块地,并有 个虫洞。
现在 John 想借助这些虫洞来回到过去(在出发时刻之前回到出发点),请你告诉他能办到吗。John 将向你提供 个农场的地图。没有小路会耗费你超过 秒的时间,当然也没有虫洞回帮你回到超过 秒以前。
输入格式
第一行一个整数 ,表示农场个数;
对于每个农场:
第一行,三个整数 ;
接下来 行,每行三个整数 ,表示在标号为 的地与标号为 的地中间有一条用时 秒的小路(双向);
接下来 行,每行三个整数 ,表示在标号为 的地与标号为 的地中间有一条可以使 John 到达 秒前的虫洞(单向)。
输出格式
输出共 行,如果 John 能在第 个农场实现他的目标,就在第 行输出 YES,否则输出 NO。
样例
样例输入 #1
2
3 3 1
1 2 2
1 3 4
2 3 1
3 1 3
3 2 1
1 2 3
2 3 4
3 1 8
样例输出 #1
NO
YES
样例解释 #1
-
第一个农场:
- 小路(双向):
- ,耗时 秒
- ,耗时 秒
- ,耗时 秒
- 虫洞(单向):
- ,回到 秒前(即时间减少 秒)
- 判断是否能回到过去(出发时刻之前回到出发点):
- 从 出发,走 耗时 秒,然后通过虫洞 回到 秒前,总时间变化 ,回到出发时刻但并非之前,不满足“之前”。
- 尝试其他路径: 耗时 秒,然后虫洞 回到 秒前,总时间 秒,仍然在出发之后。
- 无法找到一条路径使得回到 号地时总时间 ,所以输出
NO。
-
第二个农场:
- 小路(双向):
- ,耗时 秒
- ,耗时 秒
- 虫洞(单向):
- ,回到 秒前
- 判断:从 出发,走 耗时 秒,然后通过虫洞 回到 秒前,总时间变化 ,成功在出发时刻之前回到出发点,输出
YES。
数据范围
时空限制
- 时间限制:1000 ms
- 内存限制:65536 KB
注意:本题实质是判断图中是否存在负权回路(因为回到过去意味着总时间为负)。可以将虫洞的边权设为 (因为回到 秒前相当于时间减少 ),普通小路边权为 (耗时),然后判断整个图(有向图,因为虫洞是单向,小路是双向需拆成两条有向边)是否存在负环。可以使用 SPFA 或 Bellman-Ford 算法。由于 ,,算法可行。