Cod sursa(job #875834)

Utilizator pitradaPit-Rada Ionel-Vasile pitrada Data 10 februarie 2013 20:48:32
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<stdio.h>
int T,n,m,start[50003], t[3][100003],d[50003],s,viz[50003],nr,er;
void citire()
{
    int k,i,a,b,c;
    scanf("%d %d %d",&n,&m,&s);
    for (i=1;i<=n;i++)
    {
        start[i]=0;
        viz[i]=0;
        scanf("%d",d+i);
    }
    k=0;
    for (i=1;i<=m;i++)
    {
        scanf("%d %d %d",&a,&b,&c);
        k++;
        t[0][k]=b;
        t[1][k]=c;
        t[2][k]=start[a];
        start[a]=k;
    }
}
void df(int vf)
{
    viz[vf]=1;
    nr++;
    for (int i=start[vf];i;i=t[2][i])
    {
        int v=t[0][i];
        if (viz[v]==0 && d[vf]+ t[1][i]==d[v])
        {
            df(v);
        }
        else if (viz[v]==0 && d[vf]+ t[1][i]<d[v]) er++;
    }
}
int main()
{
    freopen("distante.in","rt",stdin);
    freopen("distante.out","wt",stdout);
    scanf("%d",&T);
    while (T)
    {
        citire();
        nr=0;
        er=0;
        df(s);
        if (nr==n && er==0) printf("DA\n");
        else printf("NU\n");
        T--;
    }
    fclose(stdout);
    fclose(stdin);
    return 0;
}