Cod sursa(job #1547648)

Utilizator BogdacutuSeniuc Bogdan Bogdacutu Data 9 decembrie 2015 18:25:00
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

#define MAX_N 50000

ifstream fin("distante.in");
ofstream fout("distante.out");
int T, N, M, S;
int D[MAX_N];

bool verif() {
	fin >> N >> M >> S;
	vector<bool> v(N, false);
	S--;
	for (int i = 0; i < N; i++)
		fin >> D[i];
	bool bad = false;
	if (D[S] != 0)
		bad = true;
	else
		v[S] = true;
	for (int i = 0; i < M; i++) {
		int x, y, z;
		fin >> x >> y >> z;
		x--; y--;
		if (bad)
			continue;
		if (D[x] + z < D[y])
			bad = true;
		if (D[y] + z < D[x])
			bad = true;
		if (D[x] + z == D[y])
			v[y] = true;
		if (D[y] + z == D[x])
			v[x] = true;
	}
	if (bad)
		return false;
	for (int i = 0; i < N; i++)
		if (!v[i])
			return false;
	return true;
}

int main() {
	fin >> T;
	for (int i = 0; i < T; i++)
		fout << (verif() ? "DA\n" : "NU\n");
}