Cod sursa(job #175556)

Utilizator floringh06Florin Ghesu floringh06 Data 10 aprilie 2008 07:51:37
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <cstdio>
#include <cstring>

using namespace std;

#define FIN "distante.in"
#define FOUT "distante.out"

#define MAX_N 50005

typedef struct NOD 
{
        int nod;
        NOD *next;
};

NOD *A[MAX_N];

int D[MAX_N];
int P[MAX_N];

int N, M, S;

    void solve ()
    {
         int x, y, c, i;
         int afisat = 0;
         scanf ("%d %d %d", &N, &M, &S);
         for (i = 1; i <= N; ++i) scanf ("%d", D + i);
         
         if (D[S]) printf ("NU\n"), afisat = 1;
         int ok = 1;
         memset (P, 0, sizeof (P));
         P[S] = 1;
         for (i = 1; i <= M; ++i)
         {
             scanf ("%d %d %d", &x, &y, &c);
             if (D[x] + c < D[y]) ok = 0;
             if (D[y] + c < D[x]) ok = 0;
             if (D[x] + c == D[y]) ++P[y];
             if (D[y] + c == D[x]) ++P[x];
         }
         for (i = 1; i <= N; ++i)
             if (!P[i]) ok = 0;
         if (!afisat)
            if (ok) printf ("DA\n"); else printf ("NU\n");
    }

    int main ()
    {
        freopen (FIN, "r", stdin);
        freopen (FOUT, "w", stdout);
        
        int T;
        scanf ("%d", &T);
        while (T--)
              solve ();
        
        return 0;
    }