Cod sursa(job #1410468)

Utilizator theprdvtheprdv theprdv Data 31 martie 2015 05:30:43
Problema Distante Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <queue>
#include <functional>
#include <fstream>
#include <vector>

using namespace std;

fstream fin("distante.in", ios::in);
fstream fout("distante.out", ios::out);

#define MAXN 50005
int dist[MAXN];
bool found[MAXN];

int main() 
{
	int T;
	fin >> T;

	for (; T > 0; T--){
		int n, s, x, y, c, m;
		bool less = false;

		fin >> n >> m >> s;
		for (int i = 1; i <= n; i++) fin >> dist[i], found[i] = false;

		for (int i = 1; i <= m; i++){
			fin >> x >> y >> c;
			if ((dist[y] > dist[x] + c) || (dist[x] > dist[y] + c)) { less = true; break; }
			if (dist[y] == dist[x] + c) found[y] = true;
			if (dist[x] == dist[y] + c) found[x] = true;
		}
		bool ok = true;
		if (less) ok = false;
		else for (int i = 1; i <= n; i++)
			if (!found[i] && dist[i] > 0) { ok = false; break; }

		if (ok) fout << "DA\n";
		else fout << "NU\n";
	}

	fin.close();
	fout.close();
	return 0;
}