Cod sursa(job #893558)

Utilizator fhandreiAndrei Hareza fhandrei Data 26 februarie 2013 16:26:19
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
// Include
#include <fstream>
#include <cstring>
using namespace std;

// Constante
const int sz = (int)5e4+1;

// Variabile
ifstream in("distante.in");
ofstream out("distante.out");

int tests;
int nodes, edges, source;
int dist[sz];

// Main
int main()
{
	in >> tests;
	while(tests--)
	{
		in >> nodes >> edges >> source;
		int rFrom, rTo, rCost;
		
		for(int i=1 ; i<=nodes ; ++i)
			in >> dist[i];
		
		bool valide = (dist[source] == 0);
		
		bool valideDist[sz];
		memset(valideDist, false, sizeof(valideDist));
		valideDist[source] = true;
		
		while(edges--)
		{
			in >> rFrom >> rTo >> rCost;
			valide &= dist[rTo] <= dist[rFrom] + rCost;
			valide &= dist[rFrom] <= dist[rTo] + rCost;
			
			valideDist[rTo] |= dist[rFrom] + rCost == dist[rTo];
			valideDist[rFrom] |= dist[rTo] + rCost == dist[rFrom];
		}
		
		for(int i=1 ; i<=nodes && valide ; ++i)
			valide &= valideDist[i];
		
		out << (valide? "DA" : "NU") << '\n';
	}
	
	in.close();
	out.close();
	return 0;
}