Cod sursa(job #611229)

Utilizator vendettaSalajan Razvan vendetta Data 31 august 2011 13:42:03
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <cstdio>
#include <cstring>
#define nmax 50001
using namespace std;

int d[nmax], n, m, t, rez[nmax];

void citire(){

    freopen("distante.in", "r", stdin);
    freopen("distante.out", "w", stdout);

    scanf("%d\n", &t);
}

void rezolva(){
    for(; t; t--){
        int s, ver=0;
        scanf("%d %d %d", &n, &m, &s);
        for(int i=1; i<=n; i++) rez[i] = 0;
        for(int i=1; i<=n; i++) scanf("%d ", &d[i]);
        rez[s]=1;
        for(int i=1; i<=m; i++){
            int x, y, c;
            scanf("%d %d %d", &x, &y, &c);
            if (d[x] + c < d[y] || d[y] + c < d[x]) ver=1;
            if (d[x] + c == d[y]) rez[y] = 1;
            if (d[y] + c == d[x]) rez[x] = 1;
        }
        if (d[s] != 0) ver = 1;
        if (ver) printf("NU\n");
        else{
            for(int i=1; i<=n; i++)
                if (rez[i]==0){
                    ver = 1;
                    break;
                }
            if (ver) printf("NU\n");
            else printf("DA\n");
        }

    }
}

int main(){
    citire();
    rezolva();
    return 0;
}