Cod sursa(job #65415)

Utilizator alextheroTandrau Alexandru alexthero Data 9 iunie 2007 14:06:42
Problema Distante Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <stdio.h>

#define nmax 100005

int T,n,m,s,d[nmax],v[nmax],n1,n2,cst;

int solve() {
	scanf("%d%d%d",&n,&m,&s);
	for(int i = 1; i <= n; i++) scanf("%d",&d[i]);
	for(int i = 1; i <= n; i++) v[i] = 0;
	if(d[s] != 0) return 0; 
	v[s] = 1;
	for(int i = 1; i <= m; i++) {
		scanf("%d%d%d",&n1,&n2,&cst);
		if(d[n1] + cst < d[n2]) return 0;
		if(d[n2] + cst < d[n1]) return 0;
		if(d[n1] + cst == d[n2]) v[n2] = 1;
		if(d[n2] + cst == d[n1]) v[n1] = 1;
	}
	for(int i = 1; i <= n; i++)
		if(!v[i]) return 0;
	return 1;
}

int main() {
	freopen("distante.in","r",stdin);
	freopen("distante.out","w",stdout);
	
	scanf("%d",&T);
	for(int t = 1; t <= T; t++) {
		if(solve()) printf("DA\n");
		else printf("NU\n");
	}

	return 0;
}