Cod sursa(job #189077)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 11 mai 2008 23:09:44
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>
#define INF 100001
#define Nmax 50001
int v[Nmax],a[1000][1000];
int t,n,m,s;
void scan()
{
	freopen("distante.in", "r",stdin);
	freopen("distante.out", "w",stdout);
	scanf("%d", &t);
}	
inline int verifica()
{
	if(v[s])
		return 0;
	for(int y=1;y<=n;++y)
		if(y!=s)
		{
			int ok=0;
			for(int x=1;x<=n;++x)
				if(v[x]+a[x][y]==v[y])
					ok=1;
			if(!ok)
				return 0;
		}
	return 1;	
}	
void solve()
{
	int x,y,e;
	for(int ti=1;ti<=t;++ti)
	{
		int ok=1;
		scanf("%d%d%d", &n,&m,&s);
		for(int i=1;i<=n;++i)
			for(int j=1;j<=n;++j)
				a[i][j]=INF;
		for(int i=1;i<=n;++i)
		{
			scanf("%d", &e);
			v[i]=e;
		}	
		for(int i=1;i<=m;++i)
		{
			scanf("%d %d %d\n", &x,&y,&e);
				a[x][y]=e;
			if(v[x]+e<v[y])
				ok=0;
		}
		if( verifica() && ok)
			printf("DA\n");
		else
			printf("NU\n");
	}
}	
int main()
{
	scan();
	solve();
	return 0;
}