Cod sursa(job #294797)

Utilizator StigmaSimina Pitur Stigma Data 2 aprilie 2009 19:36:28
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream.h>
#define dim 100005
ifstream fin("distante.in");
ofstream fout("distante.out");

struct muchie{long x,y,cost;};
muchie c[dim];
char v[dim];
long d[dim];

long n,m,r;

void solve()
{long i,j;
 int sw=1;
 
for (i=1;i<=m && sw;i++)
 if (d[c[i].x]+c[i].cost<d[c[i].y] && d[c[i].y]+c[i].cost<d[c[i].x]) sw=0;
  else
	  {if (d[c[i].x]+c[i].cost==d[c[i].y]) 
		  v[c[i].y]=1;
	  if (d[c[i].y]+c[i].cost==d[c[i].x]) 
		  v[c[i].x]=1;
	  }

for (i=1;i<=n && sw; i++)
	if (v[i]==0 && i!=r) 
		sw=0;
	else
		 if (v[i]==1 && i==r) sw=0;

  
 
  
if (sw) fout<<"DA"<<'\n';
	else
		fout<<"NU"<<'\n';
}


int main()
{long i;
 int t,j;
 fin>>t;
 for (j=1;j<=t;j++)
  {fin>>n>>m>>r; 
   memset(v,0,sizeof(v));
   memset(d,0,sizeof(d));
   for (i=1;i<=n;i++) fin>>d[i];
   for (i=1;i<=m;i++) fin>>c[i].x>>c[i].y>>c[i].cost;
   if (d[r]==0) solve();
    else
		fout<<"NU"<<'\n'; 
  }
 fout.close();
 return 0;
}