poj3259 Bellman_Ford算法
2015-06-01 21:51
260 查看
Wormholes
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.
!@$!#%^#$^@#%$^&*^!@$#@#$%^&**(&^%!^&*&!
View Code
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 34465 | Accepted: 12585 |
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.
!@$!#%^#$^@#%$^&*^!@$#@#$%^&**(&^%!^&*&!
#include<stdio.h> #include<string.h> const int INF=99999999; struct Node{ int u; int v; int o; }; Node edge[10250]; int dis[550]; int n,m,w,nn; void relax(int u,int v,int o) { if(dis[v]>dis[u]+o) dis[v]=dis[u]+o; } bool Bellan_Ford() { int i,j,k; for(i=1;i<=n;i++) dis[i]=INF; for(i=1;i<=n-1;i++) { for(j=1;j<=nn;j++) relax(edge[j].u,edge[j].v,edge[j].o); } for(i=1;i<=nn;i++) { if(dis[edge[i].v]>dis[edge[i].u]+edge[i].o) { return false; } } return true; } int main() { int F,i,j,k,flg; int s,e,t; scanf("%d",&F); while(F--) { flg=0;nn=1; scanf("%d %d %d",&n,&m,&w); for(i=1;i<=m;i++) { scanf("%d %d %d",&edge[nn].u,&edge[nn].v,&edge[nn].o); nn++; edge[nn].u=edge[nn-1].v,edge[nn].v=edge[nn-1].u,edge[nn].o=edge[nn-1].o; nn++; } for(i=1;i<=w;i++) { scanf("%d %d %d",&edge[nn].u,&edge[nn].v,&edge[nn].o); edge[nn].o=-edge[nn].o; nn++; } nn--; if(Bellan_Ford()==false) { flg=1; } if(flg==1) printf("YES\n"); else printf("NO\n"); } return 0; }
View Code
相关文章推荐
- hdoj分类
- JavaScript HTML DOM EventListener
- 代理服务器与反向代理服务器
- Binary Tree Level Order Traversal
- mysql存储过程事务回滚
- 'nmake' 不是内部或外部命令,VCVARS32.BAT路径问题
- Phar文件
- Java设计模式——Singleton(单例)模式
- 解决mac使用svn: E170000: Unrecognized URL scheme for https://xxx错误
- 两个python小知识点
- Intellij14 配置androidannotations
- p2p,IP多播理清思路写程序
- struts2中拦截器与过滤器的区别
- Android中的Thread与AsyncTask的区别
- android蓝牙框架bluedroid之sbc编码
- c语言结构体自引用和互引用原理及示例程序
- 开放的智力3:模式切换
- Mybatis使用之SpringMVC整合
- KNN分类器及实现
- cdoj 30 最短路 flyod