Cod sursa(job #326308)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 24 iunie 2009 16:01:36
Problema Distante Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.98 kb
#include <stdio.h>   
#include <string.h>   
  
#define Nmax 50001   
#define Inf 0x3f3f3f3f   
  
int d[Nmax],d1[Nmax];   
int x[2*Nmax],y[2*Nmax],c[2*Nmax];   
int n,m,nod,T,K;   
char buffer[1<<23];   
  
void read(int &aux)
{
	aux = 0;
	for(;buffer[K] < '0' || buffer[K] > '9';++K);
	for(;buffer[K] >= '0' && buffer[K] <= '9';++K)
		aux = aux * 10 + buffer[K] - '0';
}

int main()   
{   
    int i,j,ok,xx,yy,zz;       
    freopen("distante.in","r",stdin);   
    freopen("distante.out","w",stdout);   
       
    scanf("%d\n", &T);   
    fread(buffer,1,1<<23,stdin);
	while(T--)   
    {   
		read(n); read(m); read(nod);
		//scanf("%d %d %d\n", &n,&m,&nod);   
        memset(d,0,sizeof(d));   
        for (i=1;i<=n;++i)   
             // scanf("%d", &d1[i]);  
             read(d1[i]);			
        //scanf("\n");   
        for (i=1;i<=m;++i)   
        {   
            read(x[i]); read(y[i]); read(c[i]);   
            //scanf("%d %d %d", &x[i],&y[i],&c[i]);   
            if (x[i]==nod)   
                d[y[i]]=c[i];   
        }   
           
        for (i=1;i<=n;++i)   
              if (d[i]==0)   
                  d[i]=Inf;   
        d[nod]=0;             
           
        ok=0;   
        while(!ok)   
        {   
            ok=1;   
            for (i=1;i<=m;++i)   
                  if (d[y[i]]>d[x[i]]+c[i])   
                      d[y[i]]=d[x[i]]+c[i],   
                      ok=0;   
                      else  
                  if (d[x[i]]>d[y[i]]+c[i])   
                      d[x[i]]=d[y[i]]+c[i],   
                      ok=0;   
        }                            
        for (i=1;i<=n;++i)   
              if (d[i]!=d1[i])   
                  {   
                      ok=0;   
                      break;   
                  }   
        if (ok)   
             printf("DA\n");   
             else  
             printf("NU\n");   
    }   
    return 0;   
}