poj 3259 Wormholes 【spfa判负环---求最短路】
来源:互联网 发布:装完ubuntu进不去win10 编辑:程序博客网 时间:2024/06/02 19: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.
有n个点,m个双向路径,w个虫洞。
路径花费正数时间,虫洞花费负数时间。
求能否经过若干条路径回来过去---
思路:
spfa判负环...
spfa思想----
不断地向队列中添加队列中没有的距离变小的点(再次被优化的)。
然后拿队列中的点去优化其他路径-----
如果有某一点多次进去队列说明路径形成了环,次数超过N次,一定是负环。
代码:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int ma[1000][1000],dis[1000],ci[1000];int que[400000],kp,top,n,m,w;bool falg[1000];int main(){ int t;scanf("%d",&t); while (t--) { scanf("%d%d%d",&n,&m,&w); for (int i=1;i<=n;i++) { for (int j=1;j<=n;j++) ma[i][j]=99999999; dis[i]=99999999; falg[i]=false; ci[i]=0; } int a,b,c; for (int i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); ma[a][b]=ma[b][a]=min(ma[a][b],c); } for (int i=0;i<w;i++) { scanf("%d%d%d",&a,&b,&c); ma[a][b]=min(ma[a][b],-c); } bool fafe=false; top=0;kp=0; dis[1]=0; que[kp++]=1; while (top<kp) { int p=que[top++]; falg[p]=false; if (ci[p]>n) { fafe=true; break; } for (int i=1;i<=n;i++) { if (dis[p]+ma[p][i]<dis[i]) { dis[i]=dis[p]+ma[p][i]; if (!falg[i]) { falg[i]=true; ci[i]++; que[kp++]=i; } } } } if (fafe) printf("YES\n"); else printf("NO\n"); } return 0;}
- poj 3259 Wormholes 【spfa判负环---求最短路】
- poj 3259 Wormholes (spfa求最短路)
- [POJ 3259] Wormholes 最短路判负环(SPFA版)
- poj 3259 Wormholes(最短路+spfa+判负回路)
- POJ 3259 Wormholes (图论---最短路 Bellman-Ford || SPFA)
- POJ 3259 Wormholes (最短路 SPFA 判断负环)
- 【POJ 3259】Wormholes(最短路SPFA/Bellman_Ford)
- poj 3259 Wormholes 图论 最短路 判负环
- poj 3259 Wormholes 最短路
- poj 3259 Wormholes 最短路
- POJ Wormholes 3259(最短路)
- poj 3259 Wormholes 最短路
- POJ 3259 Wormholes(最短路)
- 【POJ 3259】Wormholes 【spfa判负环】
- poj 3259--Wormholes 【spfa判负环】
- POJ 3259-Wormholes-SPFA判负环
- POJ 3259 Wormholes SPFA判负环
- poj 3259 Wormholes【spfa判负环】
- python mysql学习总结(转)
- 使用PUT方法上传文件
- Android实现XML解析技术
- 统一登录验证过滤器
- p,&p,*p的区别
- poj 3259 Wormholes 【spfa判负环---求最短路】
- php根据ip获取地理位置
- 队列
- ExtJs整合ckeditor文本编辑器
- 判断是否包含全角
- Netty学习总结(2)——Netty的高性能架构之道
- 伪函数与多线程
- android中的:scaleType属性
- org.apache.commons.mail来发送邮件