Cod sursa(job #2103023)

Utilizator B_RazvanBaboiu Razvan B_Razvan Data 9 ianuarie 2018 18:21:47
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <cstdio>
#define NMAX 50005

using namespace std;

int N, M, S, D[NMAX], viz[NMAX];

bool verificareViz()
{
    for(int i=1; i<=N; ++i)
        if(!viz[i])
            return false;
    return true;
}

bool read()
{
    scanf("%d%d%d", &N, &M, &S);
    for(int i=1; i<=N; ++i)
    {
        scanf("%d", &D[i]);
        viz[i] = 0;
    }
    if(D[S] != 0)
        return false;
    viz[S] = 1;
    for(int i=1; i<=N; ++i)
    {
        int a, b, c;
        scanf("%d%d%d", &a, &b, &c);
        if(D[a] + c  < D[b])
            return false;
        if(D[b] + c < D[a])
            return false;
        if(D[a] + c == D[b])
            viz[b] = 1;
        if(D[b] + c == D[a])
            viz[a] = 1;
    }
    return verificareViz();
}

int main()
{
    freopen("distante.in", "r", stdin);
    freopen("distante.out", "w", stdout);
    int T;
    scanf("%d", &T);
    for(int i=1; i<=T; ++i)
    {
        if(read() == true)
            printf("DA\n");
        else
            printf("NU\n");
    }
    return 0;
}