Cod sursa(job #1547645)

Utilizator BogdacutuSeniuc Bogdan Bogdacutu Data 9 decembrie 2015 18:22:23
Problema Distante Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 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];
	if (D[S] != 0)
		return false;
	v[S] = true;
	for (int i = 0; i < M; i++) {
		int x, y, z;
		fin >> x >> y >> z;
		x--; y--;
		if (D[x] + z < D[y])
			return false;
		if (D[y] + z < D[x])
			return false;
		if (D[x] + z == D[y])
			v[y] = true;
		if (D[y] + z == D[x])
			v[x] = true;
	}
	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");
}