Cod sursa(job #508618)

Utilizator stefaniaaStefania Aungurencei stefaniaa Data 9 decembrie 2010 09:46:57
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<fstream.h>
#include<iostream.h>
ifstream f("distante.in");
ofstream g("distante.out");
long n,m,i,j,k,l,min,max,poz,y,OK,x,t;
long long mat[1000][1000],d[50000],s[50000],zaharel[50000];
int main(){
	f>>t;
	for (i=1;i<=t;i++)
	{	f>>n>>m>>x;
		for (j=1;j<=n;j++) f>>zaharel[j];
		for (j=1;j<=m;j++)
		{	f>>k>>l>>mat[k][l];
			mat[l][k]=mat[k][l];
		}
		s[x]=1;
		for (j=1;j<=n;j++) d[j]=mat[x][j];
		min=max=999999999;
		for (j=1;j<=n-1;j++)
		{	y=0;
			for (k=1;k<=n;k++)
			{	if (!d[k] && k!=x) d[k]=max;
				if (d[k]<min && !s[k] && d[k]) { min=d[k]; poz=k; }
			}
			if (min==max) poz=y;
			s[poz]=1;
			for (k=1;k<=n;k++)
				if (!s[k] && d[k]>d[poz]+mat[poz][k] && mat[poz][k]) 
					d[k]=d[poz]+mat[poz][k];
			min=max;
		}	
		OK=1;
		for (j=1;j<=n && OK;j++)
			if (d[j]!=zaharel[j]) OK=0;
		if (OK) g<<"DA"<<'\n';
		else g<<"NU"<<'\n'; 
	}
	f.close();
	g.close();
	return 0;
}