Cod sursa(job #1228860)

Utilizator smaraldaSmaranda Dinu smaralda Data 15 septembrie 2014 18:07:19
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
const int NMAX = 50010;

int dmin[NMAX];
bool vis[NMAX];

int main() {
    freopen("distante.in", "r", stdin);
    freopen("distante.out", "w", stdout);
    int tc, n, m, i, a, b, c, ok, src;

    scanf("%d", &tc);
    while(tc) {
        -- tc;
        memset(vis, 0, sizeof(vis));

        scanf("%d%d%d", &n, &m, &src);
        for(i = 1; i <= n; ++ i)
            scanf("%d", &dmin[i]);

        ok = 1;
        for(i = 1; i <= m; ++ i) {
            scanf("%d%d%d", &a, &b, &c);
            if(dmin[b] > dmin[a] + c)
                ok = 0;
            if(dmin[a] > dmin[b] + c)
                ok = 0;
            if(dmin[b] == dmin[a] + c)
                vis[b] = 1;
            if(dmin[a] == dmin[b] + c)
                vis[a] = 1;
        }

        for(i = 1; i <= n && ok; ++ i)
            if(!vis[i] && i != src)
                ok = 0;

        if(ok)
            printf("DA\n");
        else
            printf("NU\n");
    }
    return 0;
}