POJ 3259 Wormholes (Bellman-Ford 求负环)(F)
2017-07-10 11:08
393 查看
[align=center]Wormholes[/align]
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: A single integer,
F. F farm descriptions follow.
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
Lines 1..F: For each farm, output "YES" if FJ can achieve his goal, otherwise output "NO" (do not include the quotes).
Sample Input
Sample Output
Hint
For farm 1, FJ cannot travel back in time.
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.
题意:给出n个点和m条双向边且权值为正,w条单向边,权值为负。要求给定一个图,判断图中是否有负环。
题意:判断是否有环显然需要使用Bellman-Ford算法。因为本题只需判断是否有负环的存在,而不需求最短路,所以可令初始dis均为0,如果第n次松弛成功,则有负环;否则没有。
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 51462 | Accepted: 19108 |
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: A single integer,
F. F farm descriptions follow.
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
Lines 1..F: For each farm, output "YES" if FJ can achieve his goal, otherwise output "NO" (do not include the quotes).
Sample Input
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
Sample Output
NO YES
Hint
For farm 1, FJ cannot travel back in time.
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.
题意:给出n个点和m条双向边且权值为正,w条单向边,权值为负。要求给定一个图,判断图中是否有负环。
题意:判断是否有环显然需要使用Bellman-Ford算法。因为本题只需判断是否有负环的存在,而不需求最短路,所以可令初始dis均为0,如果第n次松弛成功,则有负环;否则没有。
#include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> using namespace std; #define inf 0x3f3f3f3f const int maxn=550; double dis[maxn]; int tot;//边的总数 int way[maxn*maxn][2];//存边的起点和终点 int value[maxn*maxn];//存所花费的时间 int n,m,w; bool Bellman() { for(int i=1;i<=n;i++) dis[i]=0; for(int i=0;i<=n;i++)//循环n-1次 { bool flag=false;//优化 for(int j=0;j<tot;j++) { if(dis[way[j][1]]>dis[way[j][0]]+value[j]) { flag=true; dis[way[j][1]]=dis[way[j][0]]+value[j]; } } if(!flag)return false;//无环 } return true; } int main() { int t; scanf("%d",&t); int a,b,c; while(t--) { scanf("%d%d%d",&n,&m,&w); tot=0; for(int i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); way[tot][0]=a; way[tot][1]=b; value[tot]=c; tot++; way[tot][0]=b; way[tot][1]=a; value[tot]=c; tot++; } for(int i=0;i<w;i++) { scanf("%d%d%d",&a,&b,&c); way[tot][0]=a; way[tot][1]=b; value[tot]=-c; tot++; } int i; if(Bellman()) printf("YES\n"); else printf("NO\n"); } return 0; }
相关文章推荐
- poj - 3259 Wormholes (bellman-ford算法求最短路)
- (POJ 3259)Wormholes 判断负环 bellman_ford 或者 spfa
- Wormholes( POJ 3259)(Bellman-Ford+SPFA)(判断是否有负权环)(最短路模板)
- POJ 3259 Wormholes(Bellman-Ford判负环)
- POJ 3259 Wormholes bellman-ford判负环
- poj 3259 Wormholes (Bellman-ford)
- POJ 3259 Wormholes (判断负环,SPFA或Bellman-Ford都可)
- POJ 3259 Wormholes(最短路Bellman_Ford)
- POJ 3259 Wormholes (Bellman-Ford/SPFA 判断是否存在负权环)
- poj 3259 Wormholes(SPFA || Bellman-Ford)
- poj 3259 Wormholes(基础Bellman-Ford)
- POJ 3259 Wormholes【Bellman-Ford】
- POJ 3259 Wormholes (Bellman-Ford判断负环)
- POJ 3259 Wormholes (Bellman-ford或SPFA)
- poj 3259 Wormholes (Bellman-ford)
- POJ-3259 Wormholes(负权回路[Bellman-Ford])
- POJ 3259 Wormholes (Bellman-Ford/SPFA 判断是否存在负权环)
- POJ 3259 Wormholes【bellman_ford判断负环——基础入门题】
- Bellman-Ford||SPFA-POJ-3259-Wormholes
- POJ训练计划3259_Wormholes(Bellman-Ford)(SPFA)