poj3259
来源:互联网 发布:红三兵炒股软件 编辑:程序博客网 时间:2024/06/05 14:06
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<iostream>#include<queue>#include<algorithm>using namespace std;int map[5500][5500];int dist[5500];int cnt[5500];int inqueue[5500];int spfa(int n) { queue<int> Q; while (!Q.empty()) Q.pop(); memset(inqueue, 0, sizeof (inqueue)); memset(cnt, 0, sizeof (cnt)); for (int i = 0; i < 5500; i++) dist[i] = 100000000; dist[1] = 0; inqueue[1] = 1; cnt[1]++; Q.push(1); while (!Q.empty()) { int tmp = Q.front(); Q.pop(); inqueue[tmp] = 0; for (int i = 1; i <= n; i++) { if (dist[tmp] + map[tmp][i] < dist[i]) { dist[i] = dist[tmp] + map[tmp][i]; if (!inqueue[i]) { cnt[i]++; if (cnt[i] >= n) return 1; inqueue[i] = 1; Q.push(i); } } } } return 0;}int main() { int test_cases; cin >> test_cases; while (test_cases--) { int n, m, w; cin >> n >> m >> w; for (int i = 0; i <= n; i++) for (int j = 0; j <= n; j++) map[i][j] = 100000000; for (int i = 0; i < m; i++) { int s, e, t; cin >> s >> e >> t; if (map[s][e] > t) map[s][e] = map[e][s] = t; } for (int i = 0; i < w; i++) { int s, e, t; cin >> s >> e >> t; map[s][e] = -t; } if (spfa(n)) cout << "YES\n"; else cout << "NO\n"; } return 0;}
- poj3259
- POJ3259
- poj3259
- poj3259
- poj3259
- poj3259
- poj3259
- poj3259
- poj3259
- POJ3259
- POJ3259
- poj3259
- POJ3259
- poj3259
- poj3259
- poj3259
- POJ3259
- POJ3259
- 牛逼程序员给菜鸟的忠告
- Visual Studio .NET中的Web项目和源代码管理集成
- 【ZT】哈希的原理和代价
- 用VC++建立Service服务应用程序
- C51中的code关键字
- poj3259
- 防止查看页面源代码的方法
- CYPEESS USB3.0程序解读之---GPIO
- Android的5种数据存储方式
- QT4的键盘事件
- ListView搭配DataPager控件实现分页--笔记
- argc argv
- ASCII 码值表
- Android 中的WiFi学习笔记(转载)