Cod sursa(job #592873)

Utilizator Smaug-Andrei C. Smaug- Data 30 mai 2011 23:16:04
Problema Distante Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 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;
	} else if(D[a]+c == D[b])
	  C[b]=1;

	if(D[b]+c < D[a]){
	  err=1;
	  break;
	} else 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;

}