wormholes
| Time Limit: 2000MS |
|
Memory Limit: 65536K |
| Total Submissions: 33008 |
|
Accepted: 12011 |
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.
Source
Usaco 2006 December Gold
1#include <stdio.h>2#include <string.h>3 #defineMAX 0x3f3f3f3f4 structPath5 {6 intu, V, t;7}pa[6000];8 9 intd[6000] ;Ten intN, M, W; One intS, E, T; A intF; - intCNT; - the BOOLBellman_ford () - { - for(inti =1; I <= N; i++) -D[i] =MAX; +d[1] =0 ; - BOOLFlag; + for(inti =1; I <= N; i++) {//' = ' cannot save AFlag =1 ; at for(intj =0; J < CNT; J + +) { - if(D[PA[J].V] > d[pa[j].u] +pa[j].t) { -Flag =0 ; -D[PA[J].V] = d[pa[j].u] +pa[j].t; - } - } in if(flag) - return true ; to } + return false ; - } the * intMain () $ {Panax Notoginseng //freopen ("A.txt", "R", stdin); -scanf ("%d", &f); the while(f--) { +CNT =0 ; Ascanf ("%d%d%d", &n, &m, &W); the for(inti =0; I < m; i++) { +scanf ("%d%d%d", &s, &e, &t); -PA[CNT].U = s, pa[cnt].v = e, pa[cnt].t =T; $cnt++ ; $PA[CNT].U = e, pa[cnt].v = s, pa[cnt].t =T; -cnt++ ; - } the for(inti =0; i < W; i++, cnt++) { -scanf ("%d%d%d", &s, &e, &t);WuyiPA[CNT].U = s, pa[cnt].v = e, pa[cnt].t =-T; the } - if(Bellman_ford ()) WuPuts ("NO") ; - Else AboutPuts ("YES") ; $ } - return 0 ; -}
Wormholes (Bellman-ford)