最短路练习6 /poj/3259 Wormholes 有负环
来源:互联网 发布:ubuntu 14.04 下载 编辑:程序博客网 时间:2024/06/05 06:48
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.
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#include<vector>#include<map>#include<string>#define LL long long#define eps 1e-8using namespace std;const int mod = 1e7+7;const int inf = 0x3f3f3f3f;const int maxn = 1e6 +10;int t,n,m,w,a,b,c,cnt,ans;struct edge{ int l,r,num,next;//起始点l,终点r,路的长度num,起始点能到达的上一个地方的编号;}e[10000];int head[550];//head[k]记录地点k能去的最后一个地方的编号;int vis[550];//标记 是否在队列中int dis[550];//最短距离int sum[550];//进入队列的次数;void add(int ll,int rr,int numm){ e[cnt].l=ll,e[cnt].r=rr,e[cnt].num=numm; e[cnt].next=head[ll];//e[cnt].next存上一个ll能到达的地点的编号; head[ll]=cnt++;//当前的head[ll]已经被用过了,再次更新编号;}void init()//初始化{ memset(head,-1,sizeof(head)); memset(e,0,sizeof(e)); cnt=0; ans=0;}queue<int>q;int spfa(int x){ while(!q.empty()) q.pop(); memset(dis,0x3f,sizeof(dis));//初始化 memset(vis,0,sizeof(vis)); memset(sum,0,sizeof(sum)); q.push(x); dis[x]=0; vis[x]=1; sum[x]=1; while(!q.empty())//spfa模板 { int tem=q.front(); q.pop(); vis[tem]=0; for(int i=head[tem];i!=-1;i=e[i].next) { if(dis[e[i].r]>dis[tem]+e[i].num) { dis[e[i].r]=dis[tem]+e[i].num; if(!vis[e[i].r]) { vis[e[i].r]=1; sum[e[i].r]++; if(sum[e[i].r]>n) return 1;//如果sum[e[i].r]>n说明这个点进入队列次数太多了,有负环,返回1; q.push(e[i].r); } } } } return 0;}int main(){ scanf("%d",&t); while(t--) { init(); scanf("%d%d%d",&n,&m,&w); for(int i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); add(a,b,c); add(b,a,c);//双向的 } for(int i=0;i<w;i++) { scanf("%d%d%d",&a,&b,&c); add(a,b,c*(-1));//单向,道路为负值 } for(int i=1;i<=n;i++)//判断每个点是否有负环 { if(spfa(i)) { ans=1; break; } } if(ans) printf("YES\n"); else printf("NO\n"); }}
- 最短路练习6 /poj/3259 Wormholes 有负环
- poj 3259 Wormholes 最短路
- poj 3259 Wormholes 最短路
- POJ Wormholes 3259(最短路)
- poj 3259 Wormholes 最短路
- POJ 3259 Wormholes(最短路)
- POJ 3259 Wormholes(最短路Bellman_Ford)
- poj 3259 Wormholes (最短路 Bellma_ford)
- poj 3259 Wormholes 图论 最短路 判负环
- POJ 3259 Wormholes(最短路)
- POJ 3259Wormholes(最短路bellman)
- POJ 3259 Wormholes(floyd求负环,最短路)
- POJ-3259-Wormholes [最短路][BellmanFord]
- poj 3259 Wormholes ([kuangbin带你飞]专题四 最短路练习)
- poj 3259 -- Wormholes(最短路,负环)
- poj 3259 Wormholes(最短路+spfa+判负回路)
- poj 3259 Wormholes (spfa求最短路)
- POJ 3259 Wormholes (图论---最短路 Bellman-Ford || SPFA)
- 安卓IPC(进程间通信)之Messenger基本使用
- Verilog模块调用
- 栈的应用--括号匹配()
- Android 正式签名jks证书获取SHA1
- 下载安装MyEclipse的步骤
- 最短路练习6 /poj/3259 Wormholes 有负环
- 微信开发接入获取用户信息
- LintCode 克隆二叉树
- Python的object和type理解
- mybatis查询类型为int的字段,返回null的异常
- POJ 1651 Multiplication Puzzle (区间DP OR 记忆化搜索)
- 【目标跟踪】KCF高速跟踪详解
- 洛谷P2760 科技庄园(dp)
- Android的UI主线程是ActivityThread吗?