Cod sursa(job #178977)

Utilizator nimeniaPaul Grigoras nimenia Data 15 aprilie 2008 13:51:56
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>

const long NMAX=50001;

int D[NMAX],i,j,sursa,nteste,n,m,contor,ok,rez[NMAX],nrez,nod1,nod2,c;

int main(){
    freopen("distante.in","r",stdin);
    freopen("distante.out","w",stdout);
    
    scanf("%d",&nteste);
    
    for (contor=1;contor<=nteste;contor++){
        scanf("%d%d%d",&n,&m,&sursa);
		for(i=1;i<=n;i++) scanf("%d",&D[i]),rez[i]=0;
        
        if (D[sursa]!=0) ok=0;
        else ok=1;
        
        for (i=1;i<=m;i++) {
            scanf("%d%d%d",&nod1,&nod2,&c);
            if (ok==1){
			   if ((D[nod1]+c<D[nod2]) || (D[nod2]+c<D[nod1])) ok=0;
			   else{ if ((nod2!=sursa) && (D[nod1]+c==D[nod2]))
						if (!rez[nod2]) {nrez++;rez[nod2]=1;}
					 if ((nod1!=sursa) && (D[nod2]+c==D[nod1]))
						if (!rez[nod1]) {nrez++;rez[nod1]=1;}

				   }

               }
            }

        if (nrez!=n-1) ok=0;
       
		if (ok) printf("DA\n");
        else printf("NU\n");
        nrez=0; 
    }
    
    
    
    return 0;
}