Cod sursa(job #20287)

Utilizator sarabogdanSara Nicolae Bogdan sarabogdan Data 20 februarie 2007 22:48:12
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include<stdio.h>

FILE *fin,*fout;
long a[50000][100];
long b[50000][100];
long d[50001] , i , j , n , m , nodd , x,y,z,q , nr=0;
long cit[50001];
long v;
long c[50001],t,k,kkt,ind;
long indici[50001] ;
long bif[50001];

int main()
{    
    
    fin = fopen("distante.in","r");
    fout = fopen("distante.out","w");
    
    fscanf(fin,"%ld",&t);
    for (q = 1 ; q <= t;q++)
    {
    nr = 0;
    
    fscanf(fin,"%ld%ld%ld",&n,&m,&nodd);
    
    
    for (i = 1 ; i<= n ; i++)
    {
        fscanf(fin,"%ld",&cit[i]);
        bif[i] = 0;
        c[i] = i;
        d[i] = 0;
        indici[i] = i;
    }
 
    if (q!=1)
    for (i = 1 ; i<= n ; i++) a[i][0] = 0 , b[i][0] = 0;
    for (i = 1 ; i<= m;i++)
    {
        fscanf(fin,"%ld%ld%ld",&x,&y,&z);
          a[x][0]++;
          a[x][a[x][0]] = y;
          b[x][0]++;
          b[x][b[x][0]] = z;
        
          a[y][0]++;
          a[y][a[y][0]] = x;
          b[y][0]++;
          b[y][b[y][0]] = z;
          
    }
    ind = 1;
    if (cit[nodd]!=0)
    {
                     ind = 0 ;
    }
    bif[nodd] = 1;
    for (i = 1 ; i<= n ; i++)
    {
     for (j = 1 ; j<= a[i][0] ; j++)
     {
      if (cit[i] + b[i][j] < cit[a[i][j]])
         ind = 0 ;// i = n+1 , j = a[i][0]+1;
      
      if (cit[i] + b[i][j] == cit[a[i][j]] &&a[i][j] !=nodd)
         bif[a[i][j]] = 1;
      }
     }
     for (i = 1 ; i<= n ; i++)
         if (bif[i]==0){
            ind = 0 ; break;}
     
    
     if (ind==1)
     {
                fprintf(fout,"DA\n");
     }
     else
                fprintf(fout,"NU\n");
     
     }
     return 0;
}