Cod sursa(job #676544)

Utilizator Tucu94Andrei Tuculanu Tucu94 Data 9 februarie 2012 11:46:23
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<fstream>
using namespace std;
int X,Y,d,D[250005],S,i,j,N,M,ok,poz,Min,k,D2[250005],B;
ifstream f("distante.in");
ofstream g("distante.out");

struct nod{
	int x,y,dist;
	nod* adr;
}*A,*p;
void citire (){
	
	f>>N>>M>>S;
	for(i=1;i<=N;i++)
		f>>D2[i];
	for(i=1;i<=N;i++)
		if(i!=S)	
			D[i]=99999999;
	A=NULL;
	for(int i=1;i<=M;i++){
		f>>X>>Y>>d;
		p=new nod;
		p->x =X;
		p->y =Y;
		p->dist=d;
		p->adr=A;
		A=p;
		if (X==1)
			D[Y]=d;
		
	}
}
int main(){
		
	f>>B;
	for(j=1;j<=B;j++)
	{
		citire();
		ok=1;
		
		while (ok)
		{p=A; ok=0;
			while (p!=NULL)
				{
					if (D[p->y]>D[p->x]+p->dist)
					{
						D[p->y]=D[p->x]+p->dist; 
						ok=1;
					}
					p=p->adr;
				}
		}
		
			for(i=1;i<=N;i++)
				if(i!=S)
					if(D[i]==99999999)
						D[i]=0;
			D[S]=0;
			for(i=1;i<=N;i++)
				if(i!=S)
					if(D[i]!=D2[i])
						ok=1;
		if(ok)
			g<<"NU\n";
		else
			g<<"DA\n";
		
	}				
	return 0;
}