Cod sursa(job #1409699)

Utilizator theprdvtheprdv theprdv Data 30 martie 2015 17:49:22
Problema Distante Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 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];

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

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

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

		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]) { ok = false; break; }

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

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