Cod sursa(job #330276)

Utilizator CezarMocanCezar Mocan CezarMocan Data 9 iulie 2009 13:16:33
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
#include <vector>
#define maxn 50100

using namespace std;

int t, n, i, j, m, s, a, b, c, fiu;
vector <int> v[maxn], cs[maxn];
bool ok[maxn], bine;
int dist[maxn];

int main() {
	freopen("distante.in", "r", stdin);
	freopen("distante.out", "w", stdout);

	scanf("%d", &t);

	for (; t > 0; t--) {
		scanf("%d%d%d", &n, &m, &s);
//		fprintf(stderr, "%d\n", t);
		for (i = 1; i <= n; i++) {
			scanf("%d", &dist[i]);
			ok[i] = false;
			v[i].clear();
			cs[i].clear();
		}

		ok[s] = (dist[s] == 0);

		for (i = 1; i <= m; i++) {
			scanf("%d%d%d", &a, &b, &c);
			v[a].push_back(b);
			cs[a].push_back(c);
			v[b].push_back(a);
			cs[b].push_back(c);
		}

		for (i = 1; i <= n; i++)
			for (j = 0; j < v[i].size(); j++) {
				fiu = v[i][j];
				if (dist[fiu] == dist[i] + cs[i][j])
					ok[fiu] = true;
			}
		
		bine = true;
		for (i = 1; i <= n; i++)
			bine = (bine && ok[i]);

		if (bine)
			printf("DA\n");
		else
			printf("NU\n");
	}	


	return 0;
}