Cod sursa(job #592887)

Utilizator Smaug-Andrei C. Smaug- Data 31 mai 2011 00:11:59
Problema Distante Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 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] || D[b]+c < D[a]){
	  err=1;
	  break;
	}
	if(D[a]+c == D[b])
	  C[b]=1;
	
	if(D[b]+c == D[a])
	  C[a]=1;
      }
      //else
      //for(i=1; i<=M; i++)
      //	scanf("%d%d%d");
    
    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;

}