Cod sursa(job #177626)

Utilizator nimeniaPaul Grigoras nimenia Data 13 aprilie 2008 13:29:20
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <stdio.h>

const long NMAX=50051;

struct muchie {
       long n1,n2,c;
       }M[NMAX*2];

long D[NMAX],i,j,sursa,nteste,n,m,nm,contor,ok,ok2,rez[NMAX],nrez;

int main(){
    freopen("distante.in","r",stdin);
    freopen("distante.out","w",stdout);
    
    scanf("%ld",&nteste);
    
    for (contor=1;contor<=nteste;contor++){
        scanf("%ld%ld%ld",&n,&m,&sursa);
        for(i=1;i<=n;i++) scanf("%ld",&D[i]);
        for(i=1;i<=m;i++) scanf("%ld%ld%ld",&M[nm].n1,&M[nm].n2,&M[nm].c),nm++;
        ok=1;
        if (D[sursa]!=0) ok=0;
        else{ for (i=1;i<=m && ok;i++)
                  if (D[M[i].n2]>D[M[i].n1]+M[i].c) ok=0;
              
              if (ok){
              ok2=0;    
              for (i=1;i<=m;i++)                 
                  if (M[i].n2!=sursa) 
                     if (D[M[i].n1]+M[i].c==D[M[i].n2]) 
                        if (!rez[M[i].n2])nrez++,rez[M[i].n2]=1;
              if (nrez==n-1) ok2=1;                        
              }         
                        
             } 
        if (ok && ok2) printf("DA\n");
        else printf("NU\n");
        nm=0,nrez=0; 
        for(i=1;i<=n;i++) rez[i]=0;                 
    }
    
    
    
    return 0;
}