题目
题目背景
题目描述
John 在他的农场中闲逛时发现了许多虫洞。虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前)。
John 的每个农场有 条小路(无向边)连接着 块地(从 标号),并有 个虫洞。
现在 John 想借助这些虫洞来回到过去(出发时刻之前),请你告诉他能办到吗。
输入格式
输入的第一行是一个整数 ,代表测试数据的组数。
每组测试数据的格式如下:
每组数据的第一行是三个用空格隔开的整数,分别代表农田的个数 ,小路的条数 ,以及虫洞的个数 。
每组数据的第 到第 行,每行有三个用空格隔开的整数 ,代表有一条连接 与 的小路,经过这条路需要花费 的时间。
每组数据的第 到第 行,每行三个用空格隔开的整数 ,代表点 存在一个虫洞,经过这个虫洞会到达点 ,并回到 秒之前。
输出格式
对于每组测试数据,输出一行一个字符串,如果能回到出发时刻之前,则输出 YES
,否则输出 NO
。
输入输出样例
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
NO YES
说明/提示
样例 2 解释
John 只需要沿着 的路径一直转圈即可,每转完一圈,时间就会减少一秒。
数据范围与约定
对于 的数据,,,,,。
题解
这里其实很显然,就是要求有没有负环。这里我主要想说的是为什么在这道题当中,从任意一点出发跑SPFA都是可以判断的。首先,在没有虫洞的情况下,图是双向且连同的,那就意味着无论如何我们都可以在节点之间往返。所以,如果在某一点存在一个负环,那必定可以从其他任意一点到达,从而不断优化最短路,达到用SPFA判断负环的目的。
代码
下面是代码,其实就是裸的SPFA
1 |
|