Cod sursa(job #345388)

Utilizator nautilusCohal Alexandru nautilus Data 2 septembrie 2009 20:15:55
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<fstream.h>

int cost,b[5002][5002],c[5002][5002],v[5002];
long d[5002];

void parcurgere(int k)
{
 int i;
 
 v[k]=1;
 for (i=1; i<=b[k][0]; i++)
	 {
      cost=cost+c[k][i]; 
	  if (d[b[k][i]]==0 || cost<d[b[k][i]])
		  d[b[k][i]]=cost;
	  if (v[b[k][i]]==0)
		  parcurgere(b[k][i]);
	  cost=cost-c[k][i];
	 }
}


int main()
{
 long t,n,m,s,i,j,x,y,co,a[5002],ok;	
	
 ofstream fout("distante.out");
 ifstream fin("distante.in");
 fin>>t;
 
 for (i=1; i<=t; i++)
	 {
	  fin>>n>>m>>s;
	  for (j=1; j<=n; j++)
		  fin>>a[j];
	  for (j=1; j<=m; j++)
		  {
		   fin>>x>>y>>co;
		   b[x][0]++; b[x][b[x][0]]=y;
		   c[x][0]++; c[x][c[x][0]]=co;
		   b[y][0]++; b[y][b[y][0]]=x;
		   c[y][0]++; c[y][c[y][0]]=co;
		  }
	  
	  cost=0;
	  parcurgere(s);
	  
	  d[s]=0; ok=0;
	  for (j=1; j<=n; j++)
		  if (a[j]!=d[j])
			  {
			   ok=1; break;
			  }
	  if (ok==0)
		  fout<<"DA"<<'\n'; else
		  fout<<"NU"<<'\n';
	 }
 
 fin.close();
 fout.close();
 
 return 0;
}