Cod sursa(job #158526)

Utilizator a7893Nae Mihai a7893 Data 13 martie 2008 17:57:30
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 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,j,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;	
	for(i=1;i<=n;i++)
		if(dist[i])
		{
			c=1;
			for(j=1;j<=m;j++)
			{
				if(v[j].a==i)
					if(dist[v[j].a]+v[j].c==dist[v[j].b])
						c=0;
				if(v[j].b==i)
					if(dist[v[j].a]+v[j].c==dist[v[j].b])
						c=0;
			}
			if(c)
				ok=0;
		}
}
int main()
{
	freopen("distante.in","r",stdin);
	freopen("distante.out","w",stdout);
	read();
	return 0;
}