Cod sursa(job #158544)

Utilizator a7893Nae Mihai a7893 Data 13 martie 2008 18:04:51
Problema Distante Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<stdio.h>
#define N 50001
#define M 100001
int t,n,m,s,dist[N],ok=1;
struct vec{
	int a,b,c;
}v[M];
void solve(void);
void read()
{
	int i1,i;
	scanf("%d",&t);
	for(i1=1;i1<=t;i1++)
	{
		scanf("%d%d%d",&n,&m,&s);
		for(i=1;i<=n;i++)
			scanf("%d",&dist[i]);
		for(i=1;i<=m;i++)
			scanf("%d%d%d",&v[i].a,&v[i].b,&v[i].c);
		ok=1;
		solve();
		ok==1?printf("DA\n"):printf("NU\n");
	}
}
void solve()
{
	int i,c=1;
	for(i=1;i<=n;i++)
		if(dist[i]==0&&s!=i)
			ok=0;
	for(i=1;i<=n;i++)
		if(dist[v[i].a]+v[i].c<dist[v[i].b])
			ok=0;	
	c=1;
	for(i=1;i<=n;i++)
		if(dist[v[i].a]+v[i].c==dist[v[i].b])
			c=0;
	c=1;
	for(i=1;i<=n;i++)
		if(dist[v[i].b]+v[i].c==dist[v[i].a])
			c=0;
	if(c)
		ok=0;
}
int main()
{
	freopen("distante.in","r",stdin);
	freopen("distante.out","w",stdout);
	read();
	return 0;
}