Cod sursa(job #423484)

Utilizator nautilusCohal Alexandru nautilus Data 23 martie 2010 22:21:35
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<fstream>
#include<vector>
#include<queue>

#define inf 2147483646
#define dmax 50002
using namespace std;

vector<int> a[dmax];
vector<int> c[dmax];
int n;
long dist[dmax],d[dmax];
 
void djikstra(int s)
{
 int i,elem;
 queue<int> q;
	
 for (i=1; i<=n; i++)
	 d[i]=inf;
 d[s]=0;
 
 q.push(s);
 while (q.size())
	 {
	  elem=q.front();
	  for (i=0; i<a[elem].size(); i++)
		  if (d[a[elem][i]] > d[elem] + c[elem][i] )
			  {
			   d[a[elem][i]]=d[elem]+c[elem][i];
			   q.push(a[elem][i]);
			  }
	  q.pop();
	 }
}



int main()
{
 int t,k,m,s,i,x,y,z,ok;
	
 ifstream fin("distante.in");
 ofstream fout("distante.out");
 fin>>t;
 for (k=1; k<=t; k++)
	 {
	  fin>>n>>m>>s;
	  for (i=1; i<=n; i++)
		  fin>>dist[i];
	  for (i=1; i<=m; i++)
		  {
		   fin>>x>>y>>z;
		   a[x].push_back(y);
		   a[y].push_back(x);
		   
		   c[x].push_back(z);
		   c[y].push_back(z);
		  }
	  
	  djikstra(s);
	  
	  ok=0;
	  for (i=1; i<=n; i++)
		  {
		   if (dist[i]!=d[i])
			  {
			   ok=1;
			   break;
			  }
		   
		   a[i].clear();
		  }
	 
	  if (ok==0)
		  fout<<"DA"<<'\n'; else
		  fout<<"NU"<<'\n';
	 }
	
 return 0;
}