Cod sursa(job #412671)

Utilizator victor_bla_blaDumitrescu Victor victor_bla_bla Data 5 martie 2010 21:09:02
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
//#include<cstdio>
#include<fstream>
#include<vector>
#include<queue>
#define NMAX 50004
#define inf 2000000000
#define pb push_back
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
vector<int>A[NMAX],C[NMAX];
queue<int>q;
int t,n,m,i,it,d[NMAX],dz[NMAX],s,x,y,z;
int corect()
{int i;
	for (i=1;i<=n;i++)
		if (d[i]!=dz[i]) return 0;
return 1;}
int main()
{
	//freopen("distante.in","rt",stdin);
	//freopen("distante.out","wt",stdout);
	//scanf("%d\n",&t);
	fin>>t;
	for (it=1;it<=t;it++)
	{
	
	//scanf("%d %d %d\n",&n,&m,&s);
		fin>>n>>m>>s;
	for (i=1;i<=n;i++)
		//scanf("%d ",&dz[i]);
		fin>>dz[i];
	for (i=1;i<=m;i++)
	{
		//scanf("%d %d %d\n",&x,&y,&z);
		fin>>x>>y>>z;
		A[x].pb(y);
		A[y].pb(x);
		C[x].pb(z);
		C[y].pb(z);
	}
	for (i=1;i<=n;i++)
		d[i]=inf;
	d[s]=0;
	q.push(s);
	while (!q.empty())
	{
		x=q.front();
		for (i=0;i<A[x].size();i++)
			if (d[A[x][i]]>d[x]+C[x][i])
			{
				d[A[x][i]]=d[x]+C[x][i];
				q.push(A[x][i]);
			}
		q.pop();
	}
	if (corect())
		//printf("%s\n","DA");
		fout<<"DA"<<'\n';
	else
		fout<<"NU"<<'\n';
		//printf("%d\n","NU");
	}
fout.close();
return 0;}