Cod sursa(job #380348)

Utilizator adinadrian nitu adin Data 5 ianuarie 2010 20:45:27
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<stdio.h>
int nr,n,m,s;
int a[5001][5001],lung[5000],yes,d,j,x,c,y,k,poz,i,viz[5001],min,ii,coada[5000],st=0,dr=0;

int main()
{
	freopen ("distante.in","r",stdin);
	scanf("%d",&nr);
	for(d=1;d<=nr;d++)
	{
		yes=1;
		st=0;
		dr=0;
		scanf("%d%d%d",&n,&m,&s);
		for(j=1;j<=m;j++)
		{
			scanf("%d%d%d",&x,&y,&c);
			a[x][y]=c;
		}
		for(j=1;j<=n;j++)
			scanf("%d",&lung[j]);
		k=1;
		poz=s;
		for(i=1;i<=n;i++)
			viz[i]=0;
		viz[poz]=1;
		while( st<=dr && yes)
		{
			for(j=1;j<=n;j++)
			{
				if(a[poz][j] != 0 && (! viz[j]))
				{
					coada[dr++]=j;
					if(lung[j]< lung[poz]+a[poz][j])
					{
						printf("NU");
						yes=0;
						break;
					}
				}
			}
			viz[poz]=1;
			poz=coada[++st];
		}
		if(yes)
			printf("DA\n");
	}
	printf("\n");
}