Cod sursa(job #590201)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 15 mai 2011 21:41:01
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<stdio.h>
#define Nmax 50005
#define inf 2000000000

int T, S, v[2*Nmax][3], c[Nmax], n, m, i, j, ok, qwer, D[Nmax];

int main (){
	
	freopen ("distante.in", "r", stdin);
	freopen ("distante.out", "w", stdout);
	
	scanf("%d", &T);
	for (qwer = 1 ; qwer <= T ; qwer++){
		
		scanf("%d %d %d", &n, &m, &S);
	 
		for (i = 1 ; i < S ; i++)
			c[i] = inf;
		for (i = S+1 ; i <= n ; i++)
			c[i] = inf;
     
		for (i = 1 ; i <= n ; i++)
			scanf("%d", &D[i]);
	 
		for (i = 1 ; i <= m ; i++){
			scanf ("%d %d %d", &v[i][0], &v[i][1], &v[i][2]);
			if (v[i][0] == S)
				c[ v[i][1] ] = v[i][2];
		}
		
		ok = 0;
		
		while (!ok){
		
			ok = 1;
		
			for (i = 1 ; i<= m ; i++){
				if (c[ v[i][1] ] > c[ v[i][0] ] + v[i][2]){
					c[ v[i][1] ] = c[ v[i][0] ] + v[i][2];
					ok = 0;
				}
				if (c[ v[i][0] ] > c[ v[i][1] ] + v[i][2]){
					c[ v[i][0] ] = c[ v[i][1] ] + v[i][2];
					ok = 0;
			}
		}
		
		ok = 1;
		for (i = 1 ; i <= n ; i++){
			if (c[i] == inf)
				c[i] = 0;
			if (c[i] != D[i])
				ok = 0;}
		if (ok == 1) printf("DA\n");
			else printf("NU\n");
	}
	return 0;
}