Cod sursa(job #443566)

Utilizator bora_marianBora marian bora_marian Data 17 aprilie 2010 16:39:05
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<fstream>
using namespace std;
int n,m,s,t,v[50005],verifi[50005];
struct nod{
   int info;
   int  cost;
   nod *next;};
nod *g[50005];
int verifica();
void adauga(int  a,int b,int c);
ofstream fout("distante.out");
int main()
{
	ifstream fin("distante.in");
	fin>>t;
	int i;
	for(i=1;i<=t;i++)
	{
		fin>>n>>m>>s;
		int j;
		for(j=1;j<=n;j++)
			fin>>v[j];
		for(j=1;j<=m;j++)
		{	
			int a,b,c;
			fin>>a>>b>>c;
			adauga(a,b,c);
			adauga(b,a,c);
		} 
		if(verifica()==1)
			fout<<"DA";
		else
			fout<<"NU";
		fout<<endl;
	}
	return 0;
}
int verifica()
{
	int i,pp=1;
	for(i=1;i<=n;i++)
		verifi[i]=0;
	for(i=1;i<=n;i++)
		for(nod *p=g[i];p;p=p->next)
		{	
			if(v[i]==v[p->info]+p->cost)
				verifi[i]=1;
		}
	for(i=1;i<=n;i++)
		if(verifi[i]==0 && i!=s)
			pp=0;
	if(pp==0)
		return 0;
	else
		return 1;
}
void adauga(int  a,int b,int c)
{
	nod *p=new nod;
	p->info=b;
	p->cost=c;
	p->next=g[a];
	g[a]=p;
}