poj 3259 Wormholes (Bellman-ford)
2016-02-27 20:14
351 查看
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.
Source
USACO 2006 December Gold
考察bellman-ford的用法,由于写时不注意导致出现细节错误,找了半天,所以写代码时 一定要注意细节问题
题意:有n块田,m条路,w个虫洞,其中m条路是双向的,虫洞是单向的,通过虫洞可以是时间倒流,问能否回到出发以前的时间
即判断是否出现负权图;
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 39574 | Accepted: 14541 |
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.
Source
USACO 2006 December Gold
考察bellman-ford的用法,由于写时不注意导致出现细节错误,找了半天,所以写代码时 一定要注意细节问题
题意:有n块田,m条路,w个虫洞,其中m条路是双向的,虫洞是单向的,通过虫洞可以是时间倒流,问能否回到出发以前的时间
即判断是否出现负权图;
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct node { int from; int to; int vis; }t[11000]; int dis[1100],n,m,w,all; bool bellman() { bool flag ; for(int i=0;i<n-1;i++) { flag=false; for(int j=0;j<all;j++) if(dis[t[j].to]>dis[t[j].from]+t[j].vis) { dis[t[j].to]=dis[t[j].from]+t[j].vis; flag=true; } if(!flag) break; } for(int k=0;k<all;k++) if(dis[t[k].to]>dis[t[k].from]+t[k].vis) return true; return false; } int main() { int F,a,b,c,i; scanf("%d",&F); while(F--) { memset(dis,0,sizeof(dis)); scanf("%d%d%d",&n,&m,&w); all=0; for(i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); t[all].from=a; t[all].to=b; t[all++].vis=c; t[all].from=b; t[all].to=a; t[all++].vis=c; } for(i=0;i<w;i++) { scanf("%d%d%d",&a,&b,&c); t[all].from=a; t[all].to=b; t[all++].vis=-c;//权值为负 } if(bellman()) printf("YES\n"); else printf("NO\n"); } return 0; }
相关文章推荐
- ZOJ 3778 11th省赛 C Talented Chef
- 【HDU 5438】Ponds
- NTP服务器配置
- hdu 4267 A Simple Problem with Integers 树状数组
- Android应用的自动升级、更新模块的实现
- 往SQLiteDatabase利用API或普通SQL语句增删改查数据详解
- bzoj2287【POJ Challenge】消失之物
- 实现卡片翻转的动画效果
- LeetCode题解:Reverse Linked List
- bzoj1710【Usaco2007 Open】Cheappal 廉价回文
- Ubuntu 14.04 部署 CEPH集群
- 解决System进程占用80端口
- 关于Gson的各数据类型转换
- usaco 第一章博客指引
- ubuntu 启动长时间黑屏解决
- Android 完美实现图片圆角和圆形(对实现进行分析)
- 使用多进程会造成的问题
- bzoj2101【Usaco2010 Dec】Treasure Chest 藏宝箱
- HTML5移动开发实战必备知识——本地存储(1)
- eclipse4.5在Linux下标题栏显示过大的调整方法