Cod sursa(job #936257)

Utilizator Kira96Denis Mita Kira96 Data 6 aprilie 2013 13:53:49
Problema Distante Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<fstream>
#define NM 200100
#define inf 1<<27
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int t,V[NM],A[NM],D[NM],x,y,c,B[NM],C[NM],i,n,m,T,s,OK;
int main ()
{
	f>>t;
	while(t--)
	{
		f>>n>>m>>s;
		for(i=1;i<=n;++i)
			D[i]=inf;
		for(i=1;i<=n;++i)
			f>>V[i];
		D[s]=0;
		T=0;
		for(i=1;i<=m;++i)
		{
			f>>x>>y>>c;
			A[++T]=x;
			B[T]=y;
			C[T]=c;
			A[++T]=y;
			B[T]=x;
			C[T]=c;
		}
		OK=1;
		m=2*m;
		while(OK)
		{
			OK=0;
			for(i=1;i<=m;++i)
			{
				if(D[A[i]]+C[i]<D[B[i]]){
					D[B[i]]=D[A[i]]+C[i]; OK=1; }
			}
		}
		OK=1;
		for(i=1;i<=n;++i)
			if(V[i]!=D[i])
			{ OK=0; break; }
		if(OK)
			g<<"DA\n";
		else
			g<<"NU\n";
	}
	return 0;
}