Cod sursa(job #95352)

Utilizator M@2Te4iMatei Misarca M@2Te4i Data 28 octombrie 2007 13:31:44
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<stdio.h>
#include<string.h>

long w[50005],d[50005],n,m,t,s,a,c,b;

void citire()
{
    int l=0;
    scanf("%ld%ld%ld", &n, &m, &s);
    for (int i=1; i<=n; i++)
        scanf("%ld", &d[i]);
    if (d[s]!=0)
    {
        printf("NU\n");
        l=1;
    }
    w[s]=1;
    for (long i=1; i<=m; i++)
    {
        scanf("%ld%ld%ld", &a, &b, &c);
        if ((d[a]+c<d[b] || d[b]+c<d[a]) && l==0)
        {
            printf("NU\n");
            l=1;
        }
        if (d[a]+c==d[b])
            w[b]=1;
        if (d[b]+c==d[a])
            w[a]=1;
    }
    for (long i=1; i<=n; i++)
        if (w[i]==0 && l==0)
        {
            printf("NU\n");
            l=1;
        }
    if (l==0)
        printf("DA\n");
}

int main()
{
    freopen("distante.in","r",stdin);
    freopen("distante.out","w",stdout);
    scanf("%ld\n", &t);
    for (int i=1; i<=t; i++)
    {
        memset(w,0,sizeof(w));
        memset(d,0,sizeof(d));
        citire();
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}