Cod sursa(job #479986)

Utilizator Astrid28Ruxandra Cohal Astrid28 Data 25 august 2010 22:22:14
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<iostream>
#include<fstream>
#define NMax 50001

using namespace std;

ifstream fin("distante.in");
ofstream fout("distante.out");

int t;

void initializare_predecesor( long n, bool predecesor[NMax] )
{
	long i;

	for ( i = 1; i <= n; i++ )
		predecesor[i] = false;
}


bool corect ()
{
	long n, m, s, d[NMax], i, a, b;
	int c;
	bool predecesor[NMax], ok = true;

	fin >> n >> m >> s;
	
	initializare_predecesor( n, predecesor );

	for ( i = 1; i <= n; i++ )
		fin >> d[i];

	for ( i = 1; i <= m ; i++ )
	{
		fin >> a >> b >> c;

		if ( d[a] + c == d[b] )
			predecesor[b] = true;
		else
			if ( d[a] + c < d[b] )
				ok = false;

		if ( d[b] + c == d[a] )
			predecesor[a] = true;
		else
			if ( d[b] + c < d[a] )
				ok = false;
	}

	if ( !ok ) return ok;

	if ( d[s] != 0 ) return false;

	for ( i = 1; i <= n; i++ )
		if ( !predecesor[i] && i != s )
			return false;

	return true;	
}


int main()
{
	int i;

	fin >> t;
	for ( i = 1; i <= t; i++ )
		if ( corect() ) fout << "DA" << endl;
		else fout << "NU" << endl;

	return 0;
}