Cod sursa(job #189079)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 11 mai 2008 23:35:51
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>
#define Nmax 50001
int viz[Nmax],d[Nmax];
int t,n,m,s;
void scan()
{
	freopen("distante.in", "r",stdin);
	freopen("distante.out", "w",stdout);
	scanf("%d", &t);
}	
void solve()
{
	int x,y,c;
	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) */ 
       	for(int i=1;i<=n;++i)
		{
			scanf("%d", &c);
			d[i]=c;
		}
		if(d[s])
			ok=0;
		for(int i=1;i<=m;++i)
		{
			scanf("%d %d %d\n", &x,&y,&c);
			if (d[x]+c<d[y])  
				ok=0;  
            else 
				if (d[x]+c==d[y]) 
					viz[y]=1;  
            if (d[y]+c<d[x]) 
				ok=0;  
            else 
				if (d[y]+c==d[x]) 
					viz[x]=1;  
        }
		
		
		for(int i=1;i<=n;++i)
			if(!viz[i] && i!=s)
				ok=0;
		
			
		if(ok)
			printf("DA\n");
		else
			printf("NU\n");
	}
}	
int main()
{
	scan();
	solve();
	return 0;
}