Cod sursa(job #592884)

Utilizator Smaug-Andrei C. Smaug- Data 31 mai 2011 00:06:43
Problema Distante Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>
#include <string>

#define MAXN 50000

int main(){

  freopen("distante.in", "r", stdin);
  freopen("distante.out", "w", stdout);

  int N, M, S, T, D[MAXN+10], C[MAXN+10], i, a, b, c, err;
  
  scanf("%d", &T);
  while(T--){

    memset(C, 0, sizeof(C));
    err=0;    

    scanf("%d%d%d", &N, &M, &S);

    for(i=1; i<=N; i++)
      scanf("%d", D+i);

    if(D[S]==0)
      C[S]=1;
    else
      err=1;

    if(!err)
    for(i=1; i<=M; i++){
      scanf("%d%d%d", &a, &b, &c);
      if(D[a]+c < D[b]){
	err=1;
	//break;
      }
      if(D[a]+c == D[b])
	C[b]=1;
      
      if(D[b]+c < D[a]){
	err=1;
	//break;
      } 
      if(D[b]+c == D[a])
	C[a]=1;
    }
    
    //if(!err)
    for(i=1; i<=N; i++)
      if(!C[i]){
	err=1;
	//break;
      }
   
    if(!err)
      printf("DA\n");
    else
      printf("NU\n");

  }

  return 0;

}