【luogu2850】[USACO06DEC]虫洞Wormholes
2018-03-13 13:36
183 查看
(http://www.elijahqi.win/2017/07/12/%E3%80%90luogu2850%E3%80%91usaco06dec%E8%99%AB%E6%B4%9Ewormholes/%20%E2%80%8E)
题目描述
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.
John在他的农场中闲逛时发现了许多虫洞。虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前)。John的每个农场有M条小路(无向边)连接着N (从1..N标号)块地,并有W个虫洞。其中1<=N<=500,1<=M<=2500,1<=W<=200。 现在John想借助这些虫洞来回到过去(出发时刻之前),请你告诉他能办到吗。 John将向你提供F(1<=F<=5)个农场的地图。没有小路会耗费你超过10000秒的时间,当然也没有虫洞回帮你回到超过10000秒以前。
输入输出格式
输入格式:
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.
输出格式:
Lines 1..F: For each farm, output “YES” if FJ can achieve his goal, otherwise output “NO” (do not include the quotes).
输入输出样例
输入样例#1:
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
输出样例#1:
NO
YES
说明
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.
题解:dfs-spfa判断负环,当然bfs也可以,因为数据量小
今天再次将变量名写错。我。浪费很多时间
题目描述
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.
John在他的农场中闲逛时发现了许多虫洞。虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前)。John的每个农场有M条小路(无向边)连接着N (从1..N标号)块地,并有W个虫洞。其中1<=N<=500,1<=M<=2500,1<=W<=200。 现在John想借助这些虫洞来回到过去(出发时刻之前),请你告诉他能办到吗。 John将向你提供F(1<=F<=5)个农场的地图。没有小路会耗费你超过10000秒的时间,当然也没有虫洞回帮你回到超过10000秒以前。
输入输出格式
输入格式:
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.
输出格式:
Lines 1..F: For each farm, output “YES” if FJ can achieve his goal, otherwise output “NO” (do not include the quotes).
输入输出样例
输入样例#1:
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
输出样例#1:
NO
YES
说明
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.
题解:dfs-spfa判断负环,当然bfs也可以,因为数据量小
今天再次将变量名写错。我。浪费很多时间
#include <cstdio> #include <cstring> #define N 550 #define inf 0x7fffffff inline int read(){ int x=0;char ch=getchar(); while (ch<'0'||ch>'9') ch=getchar(); while (ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();} return x; } int num,h ,n,m,w; struct node { int x,y,z,next; }data[6000]; inline void insert1(int x,int y,int z){ data[++num].x=x;data[num].y=y;data[num].z=z;data[num].next=h[x];h[x]=num; //data[++num].x=y;data[num].y=x;data[num].z=z;data[num].next=h[y];h[y]=num; } bool flag,visit ; int f ; void spfa(int x){ if (visit[x]==true){ visit[x]=false;flag=true;return; } visit[x]=true; for (int i=h[x];i;i=data[i].next){ int y=data[i].y,z=data[i].z; if (f[x]+z<f[y]){ //printf("f[y]%d ",f[y]); f[y]=f[x]+z;//printf("%d %d %d\n",x,y,z);printf("%d ",visit[y]);printf("%dasdfasd%dasdf",f[x],f[y]); /* if (visit[y]||flag){ flag=true;break; }*/ spfa(y); if (flag) break; } } visit[x]=false; } int main(){ freopen("2850.in","r",stdin); freopen("2850.out","w",stdout); int F=read(); while (F--){ n=read();m=read();w=read(); num=0;memset(h,0,sizeof(h)); memset(visit,false,sizeof(visit)); int x,y,z;flag=false; for (int i=1;i<=m;++i) { x=read();y=read();z=read(); insert1(x,y,z);insert1(y,x,z); } for (int i=1;i<=w;++i){ x=read();y=read();z=read(); insert1(x,y,-z); } //for (int i=1;i<=num;++i) printf("%d %d %d\n",data[i].x,data[i].y,data[i].z); //for (int i=1;i<=n;++i) f[i]=inf; memset(f,0,sizeof(f)); for (int i=1;i<=n;++i){ spfa(i);//for (int i=1;i<=n;++i) printf("%d ",f[i]); if (flag) break; } if (flag)printf("YES\n");else printf("NO\n"); } return 0; }
相关文章推荐
- Maven查看当前生效的settings.xml
- AD9中怎么建立多个部分的组成的单个器件
- access_token 分析
- 【luogu2880】[USACO07JAN]平衡的阵容Balanced Lineup
- 错误LifecyclePhaseNotFoundException,Unknown lifecycle phase "mvn". You must specify a valid lifecycle
- 【bzoj5105】[CodePlus2017]晨跑
- 移动端字体垂直居中偏上问题
- 业务大盘接入
- [基础] 3. Android四大组件
- 挑战编程技能之检查密码强度
- Python--Socket网络编程
- SDL Trados Studio获取+安装
- [基础] 3.1 Activity的工作过程
- springmvc+mybatis学习笔记(汇总)
- linux的centos 怎么安装bzip2
- codeforces 831A
- Android通知的用法(观第一行代码2随记)
- 弗洛伊德
- 安卓键 adb shell input keyevent code
- ubuntu16.04 设置鼠标滚轮速度