Cod sursa(job #403314)

Utilizator dan_10Dan Alexandru dan_10 Data 24 februarie 2010 20:35:35
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<stdio.h>

using namespace std;
long max=400000;
int t;
long n,m,d[50050],s,v[50050];
struct dist
{	long x,y,c;
}	a[100200];

int main()
{	
	freopen("distante.in","r",stdin);
	freopen("distante.out","w",stdout);
	scanf("%d",&t);
	
	while(t>0)
	{	
		t--;
		scanf("%ld%ld%ld",&n,&m,&s);
		for(int i=1;i<=n;i++)
			scanf("%ld",&v[i]);
		for(int i=1;i<=m;i++)
		{	scanf("%ld%ld%ld",&a[i].x,&a[i].y,&a[i].c);
			if(a[i].x==s) d[a[i].y]=a[i].c;
		}
		for(int i=1;i<=n;i++)
			if(d[i]==0) d[i]=max;
	int cont=2;
	int ok=1;
	while(cont==2)
	{	cont=0;
		for(int i=1;i<=m;i++)
			if(d[a[i].y]>d[a[i].x]+a[i].c)
			{	d[a[i].y]=d[a[i].x]+a[i].c;
				cont=2;
			}
	}
	
	d[s]=0;
	for(int i=1;i<=n && ok;i++)
		if(v[i]!=d[i]) ok=0;

	if(ok==1) printf("DA\n");
		else  printf("NU\n");
	for(int i=1;i<=n;i++)
		d[i]=0;
	
	}
	
	fclose(stdin);
	fclose(stdout);
	return 0;
	
}