POJ3259 Wormholes 解题报告--bellman_ford

来源:互联网 发布:php打表格 编辑:程序博客网 时间:2024/05/22 02:02
Wormholes
Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 25153 Accepted: 8973

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 toF (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 toE that also moves the traveler backT 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

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 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
#include<iostream>#define inf 0xfffffusing namespace std;struct s{int begin,end,time;}edge[2600];int n,m,h;bool bellman_ford(){int flag=0,i,j,k;int c=1;int dis[1001];for(i=1;i<=n;i++)dis[i]=inf;//设虚拟点到各点的距离为无穷大for(i=0;i<n;i++)//循环n-1次{flag=0;if(c++>n) break;for(j=1;j<=m;j++)//m是道路条数{if(dis[edge[j].begin]>dis[edge[j].end]+edge[j].time)//更新如0到1是否大于0到2再到1{dis[edge[j].begin]=dis[edge[j].end]+edge[j].time;flag=1;//说明有更新}if(dis[edge[j].end]>dis[edge[j].begin]+edge[j].time)//反向更新{dis[edge[j].end]=dis[edge[j].begin]+edge[j].time;flag=1;}}for(;j<=m+h;j++){if(dis[edge[j].end]>dis[edge[j].begin]-edge[j].time){dis[edge[j].end]=dis[edge[j].begin]+-edge[j].time;flag=1;}}if(flag==0) break;//如果循环一次无法更新则说明虫洞的负权不起作用,这时光倒流不可能完成}return flag;//因为这是bool函数所以返回值只有1和0,这里1说明可行//flag始终是1说明可以循环下去直到成为负环,负环即是时光倒退符合题意}int main(){int r;scanf("%d",&r);while(r--){scanf("%d%d%d",&n,&m,&h);//总数,接下来道路数,虫洞数int i,j;for(i=1;i<=m+h;i++){scanf("%d%d%d",&edge[i].begin,&edge[i].end,&edge[i].time);//把map[a][b]=c中的abc放到一个点中//因为把ab都放入一个点中,这表示a到b和b到a都是存为time的c}if(bellman_ford())//判bellprintf("YES\n");elseprintf("NO\n");}return 0;}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 审驾照时间过了怎么办 b2驾驶证扣了分怎么办 a2驾照逾期未审怎么办 中学生只想打游戏不肯学习怎么办 汽车4年未年检怎么办 2年没有验车怎么办 驾驶证过期2年半怎么办 审车逾期一个月怎么办 摩托车驾驶证年审过期一个月怎么办 摩托车驾驶证记满12分怎么办 b2驾驶证扣2分该怎么办 b2扣6分以上怎么办 审驾照晚了3天怎么办 考驾驶证3年到期怎么办 学习驾驶证明过期了怎么办 a2扣了12分怎么办 驾照a2扣6分了怎么办 a2本扣9分怎么办 驾驶证分扣3分怎么办? 异地换驾驶证没有居住证怎么办 b2开c1车扣分怎么办 驾照五次没考过怎么办 大车行驶证丢了怎么办 车的产权证丢了怎么办 车子行驶证掉了怎么办 定期的存折丢了怎么办 存折密码输错6次怎么办 营业执照原件丢失怎么办怎么注销 违章扣了14分怎么办 c1驾驶本过期了怎么办 考驾照没带身份证怎么办 上海扣满12分怎么办 美宝旅行证丢失怎么办 汽车证件全丢了怎么办 车的行驶本丢了怎么办 车和行驶证丢了怎么办 考驾照人在外地怎么办 外地考驾照没有居住证怎么办 考驾驶证预约密码忘了怎么办 考驾照密码忘了怎么办 考驾照的密码忘了怎么办