Wormholes
Time Limit: 2000MS |
|
Memory Limit: 65536K |
Total Submissions: 34465 |
|
Accepted: 12585 |
Description
While exploring he many farms, Farmer John has discovered a number of amazing wormholes. A wormhole is very peculiar because it's a one-way path that delivers the IT destination at a time that's before you entered the wormhole! Each of the 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 a avid time-traveling fan, he wants to does the following:start at some field, travel through some paths and worm Holes, and return to the starting field a time before his initial departure. Perhaps he'll be able to meet himself:).
To help FJ find out whether this is possible or not, he'll supply you with complete maps to F (1≤ f ≤ 5) of his farms. No paths'll take longer than seconds to travel and no wormhole can bring FJ back in time by more than-seco Nds.
Input
Line 1: A single integer,
F.
FFarm 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
Sand
EThat requires
TSeconds to traverse. The might is 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-path from
STo
EThat also moves the traveler back
TSeconds.
Output
Lines 1..
F: For each farm, output "YES" if FJ can achieve his goal, otherwise output "NO" (does 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 on time by the cycle 1->2->3->1, arriving back at he starting location 1 second Before he leaves. He could start from anywhere in the cycle to accomplish this. [Email protected]$!#%^#$^@#%$^&*^[email protected]$#@#$%^&** (&^%!^&*&!
1#include <stdio.h>2#include <string.h>3 4 Const intinf=99999999;5 6 structnode{7 intu;8 intv;9 into;Ten }; One ANode edge[10250]; - intdis[550]; - intN,m,w,nn; the - voidRelaxintUintVinto) - { - if(dis[v]>dis[u]+o) +dis[v]=dis[u]+o; - } + A BOOLBellan_ford () at { - inti,j,k; - for(i=1; i<=n;i++) -dis[i]=INF; - - for(i=1; i<=n-1; i++) in { - for(j=1; j<=nn;j++) to Relax (EDGE[J].U,EDGE[J].V,EDGE[J].O); + } - the for(i=1; i<=nn;i++) * { $ if(dis[edge[i].v]>dis[edge[i].u]+edge[i].o)Panax Notoginseng { - return false; the } + } A return true; the } + - intMain () $ { $ intF,I,J,K,FLG; - ints,e,t; -scanf"%d",&F); the while(f--) - {Wuyiflg=0; nn=1; thescanf" %d%d%d",&n,&m,&W); - for(i=1; i<=m;i++) Wu { -scanf" %d%d%d",&edge[nn].u,&edge[nn].v,&edge[nn].o); Aboutnn++; $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++) A { +scanf" %d%d%d",&edge[nn].u,&edge[nn].v,&edge[nn].o); theedge[nn].o=-EDGE[NN].O; -nn++; $ } thenn--; the if(Bellan_ford () = =false) the { theflg=1; - } in if(flg==1) theprintf"yes\n"); the Else Aboutprintf"no\n"); the } the return 0; the}
View Code
poj3259 Bellman_ford algorithm