Cod sursa(job #2302870)

Utilizator maria_sinteaMaria Sintea maria_sintea Data 15 decembrie 2018 11:09:54
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <istream>
#include <cstdio>
#include <cstring>
#define N 50005

using namespace std;

int n, m, st, t, d[N], viz[N];

int citire(int m, int n, int st)
{
    int x, y, c, ok=1;
    if(d[st]!=0)
        ok=0;
    for(int i=0;i<m;i++)
    {
        scanf("%d %d %d", &x, &y, &c);
        if(d[y]>d[x]+c || d[x]>d[y]+c)
            ok=0;
        if(d[y]==d[x]+c)
            viz[y]=1;
        if(d[x]==d[y]+c)
            viz[x]=1;
    }
    if(!ok)
        return 0;
    for(int i=1;i<=n;i++)
        if(viz[i]==0)
            return 0;
    return 1;
}

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

    scanf("%d\n", &t);
    for(int test=0;test<t;test++)
    {
        scanf("%d %d %d\n", &n, &m, &st);
        memset(viz, 0, sizeof(viz));
        viz[st]=1;
        for(int i=1;i<=n;i++)
            scanf("%d ",&d[i]);
        if(citire(m, n, st))
            printf("DA\n");
        else
            printf("NU\n");
    }
    return 0;
}