Cod sursa(job #494746)

Utilizator SpiderManSimoiu Robert SpiderMan Data 22 octombrie 2010 19:22:08
Problema Distante Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
# include <cstdio>

const char *FIN = "distante.in", *FOU = "distante.out" ;
const int MAX = 60005 ;

bool X[MAX] ;
short V[MAX] ;
int T, N, M, S ;

int main ( void ) {
    freopen ( FIN, "r", stdin ) ;
    freopen ( FOU, "w", stdout ) ;

    for ( scanf ( "%d", &T ) ; T ; --T ) {
        int stop = 1;
        scanf ( "%d %d %d", &N, &M, &S ) ;
        for ( int i = 1; i <= N; ++i ) {
            scanf ( "%hd", V + i ) ;
            X[i] = 0 ;
        }
        for ( int i = 1, a, b, c; i <= M; ++i ) {
            scanf ( "%d %d %d", &a, &b, &c ) ;
            if ( V[a] + c == V[b] ) {
                X[b] = 1 ;
            } else if ( V[b] + c == V[a] ) {
                X[a] = 1 ;
            }
            if ( V[a] + c < V[b] || V[b] + c < V[a] ) {
                stop = 0 ;
            }
        }
        for ( int i = 1; i <= N; ++i ) {
            if ( i != S && X[i] == 0 ) {
                stop = 0 ;
                break ;
            }
        }
        printf ( "%s\n", stop ? "DA" : "NU" ) ;
    }
}