Cod sursa(job #41637)

Utilizator corina_vornicescuCorina Vornicescu corina_vornicescu Data 28 martie 2007 14:03:21
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<fstream.h>
#define INF 1000000000
int T;
long A[1000],viz[1000],D[1000],C[1000][1000],a,b,c,N,S,M,i,j,min,v;
int q,t;

int main()
{
ifstream f("distante.in");
ofstream g("distante.out");

f>>T;

for(q=1;q<=T;q++)
{
f>>N>>M>>S;
for(i=1;i<=N;i++)
	f>>D[i];
for(i=1;i<=M;i++)
	{
	f>>a>>b>>c;
	C[a][b]=c;
	C[b][a]=c;
	}
for(i=1;i<=N;i++)
	{
	A[i]=INF;
	viz[i]=0;
	}
for(i=1;i<=N;i++)
	if(C[S][i]!=0)
		A[i]=C[S][i];
t=1;
viz[S]=1;
A[S]=0;
while(t)
	{
	min=INF;
	t=0;
	for(i=1;i<=N;i++)
		if(viz[i]==0 && A[i]<min)
			{
			min=A[i];
			v=i;
			t=1;
			}
	viz[v]=1;
	for(i=1;i<=N;i++)
		if(C[v][i]!=0 && A[v]+C[v][i]<A[i])
			A[i]=A[v]+C[v][i];
	}
t=1;
for(i=1;i<=N;i++)
	if(A[i]!=D[i])
		{
		t=0;
		g<<"NU"<<'\n';
		break;
		}

if(t==1)
	g<<"DA"<<'\n';
}


return 0;
}