Cod sursa(job #1484492)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 11 septembrie 2015 12:30:56
Problema Distante Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<cstdio>
typedef struct M {
    int x,y;
    M *u;
}N;
int i,k,c,n,m,s,t,l,d[50001],f[50001];
N *g[50001],*p;
void D(N *&q,int a,int b) {
    N *p=new N;
    p->x=a,p->y=b,p->u=q,q=p;
}
int main() {
    freopen("distante.in","r",stdin),freopen("distante.out","w",stdout),scanf("%d",&t);
    while(t--) {
        scanf("%d%d%d",&n,&m,&s);
        for(i=1;i<=n;i++)
            scanf("%d",d+i),f[i]=0;
        while(m--)
            scanf("%d%d%d",&i,&k,&c),D(g[i],k,c),D(g[k],i,c);
        f[s]=!d[s]?1:f[s];
        for(l=0,i=1;i<=n;i++)
        for(p=g[i];p;p=p->u)
        if(p->x!=s&&d[p->x]==p->y+d[i])
            f[p->x]=1;
        for(i=1;i<=n;i++)
        if(!f[i])
            l=1;
        printf("%s\n",!l?"DA":"NU");
    }
}