Cod sursa(job #252294)

Utilizator diannaDiaconu Diana dianna Data 4 februarie 2009 10:31:07
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<fstream.h>
ifstream f("distante.in");
ofstream g("distante.out");
long n,m,d[50010],s;
int t;
struct elem
{
	long inf;
	int cost;
	elem *urm;
}*a[50010];

void citire()
{
 
long i,x,y,co;
 elem *p;
 f>>n>>m>>s;
 for( i=1;i<=n;i++)
	f>>d[i];
 for(i=0;i<m;i++)
 {
	f>>x>>y>>co;
	p=new elem;
	p->inf=y;
	p->cost=co;
	p->urm=a[x];
	a[x]=p;
	p=new elem;
	p->inf=x;
	p->cost=co;
	p->urm=a[y];
	a[y]=p;
 }

}

void init()
{ 
 long i;
 for(i=1;i<=n;i++)
	a[i]=NULL;
}

int parcurg()
{
 long i;
 if(d[s]!=0)
	return 0;
 else
 {
	for(int i=1;i<=n;i++)
	{
		elem *p=a[i];
		while(p)
		{
			if(d[i]>d[p->inf]+p->cost)
				return 0;
			p=p->urm;
		}
	}
	return 1;
 }
}

int main()
{long i;
 f>>t;
 for(i=0;i<t;i++)
 {
	init();
	citire();
	if(parcurg())
		g<<"DA"<<'\n';
	else
		g<<"NU"<<'\n';
 }
 g.close();
 return 0;
}