poj 3259
来源:互联网 发布:mac系统机器码怎么查看 编辑:程序博客网 时间:2024/06/06 00:15
Description
While exploring his many farms, Farmer John has discovered a number of amazing wormholes. A wormhole is very peculiar because it is a one-way path that delivers you to its destination at a time that is BEFORE you entered the wormhole! Each of FJ's farms comprises N (1 ≤ N ≤ 500) fields conveniently numbered 1..N, M (1 ≤ M ≤ 2500) paths, and W (1 ≤ W ≤ 200) wormholes.
As FJ is an avid time-traveling fan, he wants to do the following: start at some field, travel through some paths and wormholes, and return to the starting field a time before his initial departure. Perhaps he will be able to meet himself :) .
To help FJ find out whether this is possible or not, he will supply you with complete maps to F (1 ≤ F ≤ 5) of his farms. No paths will take longer than 10,000 seconds to travel and no wormhole can bring FJ back in time by more than 10,000 seconds.
Input
Line 1 of each farm: Three space-separated integers respectively: N, M, and W
Lines 2..M+1 of each farm: Three space-separated numbers (S, E, T) that describe, respectively: a bidirectional path between S and E that requires T seconds to traverse. Two fields might be connected by more than one path.
Lines M+2..M+W+1 of each farm: Three space-separated numbers (S, E, T) that describe, respectively: A one way path from S to E that also moves the traveler back T seconds.
Output
Sample Input
23 3 11 2 21 3 42 3 13 1 33 2 11 2 32 3 43 1 8
Sample Output
NOYES
Hint
For farm 2, FJ could travel back in time by the cycle 1->2->3->1, arriving back at his starting location 1 second before he leaves. He could start from anywhere on the cycle to accomplish this.
Source
#include<cstdio>#include<cstring>#include<queue>#define INF 0x3f3f3f3fusing namespace std;struct Node { int to; int weight; int next;};Node node[5500];int count = 0;int n, m, t;int head[505];int dis[505];int visited[505];int flash[505];queue<int> q;void add(int u, int v, int w) { node[count].to = v; node[count].weight = w; node[count].next = head[u]; head[u] = count++;}void spfa(int a) { int t; memset(visited, 0, sizeof(visited)); memset(flash, 0, sizeof(flash)); for(int i = 1; i <= n; i++) dis[i] = INF; dis[a] = 0; while(!q.empty()) q.pop(); q.push(a); while(!q.empty()) { t = q.front(); q.pop(); visited[t] = 0; for(int k = head[t]; k != -1; k = node[k].next) { if(dis[node[k].to] > dis[t] + node[k].weight) { dis[node[k].to] = dis[t] + node[k].weight; if(!visited[node[k].to]) { q.push(node[k].to); visited[node[k].to] = 1; flash[node[k].to]++; if(flash[node[k].to] > n) //重要,当优化大于n次后,就说明出现了环, 应该退出。 return; } } } }}int main() { int c, i, u, v, w; scanf("%d", &c); while(c--) { count = 0; memset(head, -1, sizeof(head)); scanf("%d%d%d", &n, &m, &t); for(i = 1; i <= n; i++) dis[i] = INF; dis[1] = 0; for(i = 0; i < m; i++) { scanf("%d%d%d", &u, &v, &w); add(u, v, w); add(v, u, w); } for(i = 0; i < t; i++) { scanf("%d%d%d", &u, &v, &w); add(u, v, -w); } for(i = 1; i <= n; i++) { spfa(i); if(dis[i] < 0) break; } if(i != n + 1) printf("YES\n"); else printf("NO\n"); }}
- poj 3259
- poj 3259
- poj-3259
- poj 3259
- poj 3259
- poj 3259
- POJ 3259
- poj 3259
- poj.3259
- poj-3259
- POJ 3259
- poj-3259
- poj 3259
- POJ-3259
- poj 3259
- POJ 3259
- poj----3259
- poj 3259
- Linux 下Apache虚拟主机的配置
- import导入工程时出现error:DescriptionResourcePathLocationType Target runtime com.genuitec.runtime.gener
- 2017微软预科生面试总结
- CentOS 7内核配置、编译与安装
- STM32的AFIO时钟何时开启
- poj 3259
- 【IMWeb】作业-select制作
- web项目发布过程
- 各种前端框架中的路由原理解析
- 即拿即用-Android多线程断点下载
- cdq分治——bzoj1176: [Balkan2007]Mokia/bzoj2683: 简单题
- ethtool 命令输出的注意点
- 第三十七讲项目一 位乘大于位和
- 【IMWeb训练营作业】select组件