Cod sursa(job #467398)

Utilizator borsoszalanBorsos Zalan borsoszalan Data 28 iunie 2010 17:58:47
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <stdio.h>
#define Nmax 50001
int viz[Nmax],d[Nmax];
int t,n,m,s;


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)
		{
			scanf("%d", &c);
			d[i]=c;
		}
		if(d[s])
			ok=0;
		for(int i=1;i<=m;++i)
		{
			scanf("%d %d %d", &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()
{
	freopen("distante.in", "r",stdin);
	freopen("distante.out", "w",stdout);
	scanf("%d", &t);
	solve();
	return 0;
}