Cod sursa(job #1484493)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 11 septembrie 2015 12:34:54
Problema Distante Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<stdio.h>
#include<stdlib.h>
typedef struct N {
	int x,y;
	struct N *u;
}M;
int i,k,c,n,m,s,t,l,d[50001],f[50001];
M *g[50001];
int main() {
	freopen("distante.in","r",stdin),freopen("distante.out","w",stdout),scanf("%d",&t);
	while(t--) {
		l=0,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);
            g[0]=(M*)malloc(sizeof(M));
            g[0]->x=k,g[0]->y=c,g[0]->u=g[i],g[i]=g[0],g[0]->x=i,g[0]->u=g[k],g[k]=g[0];
      	}
      	f[s]=!d[s]?1:f[s];
      	for(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");
	}
}