Cod sursa(job #1322283)

Utilizator mateidanutDanut Gabriel Matei mateidanut Data 19 ianuarie 2015 22:12:13
Problema Distante Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <fstream>
#include <limits.h>
using namespace std;

ifstream f("distante.in");
ofstream g("distante.out");

int d[50001], v[50001], i, j, k, n, m, s, t, ok;

int main()
{	f>>t;
	for (; t; --t)
	{	f>>n>>m>>s;
		for (i=1; i<=n; ++i) f>>d[i];
		if (d[s]!=0) g<<"NU\n";
		else
		{	ok=1;
			for (i=1; i<=n; ++i) v[i]=0;
			v[s]=1;
			for (; m && ok; --m)
			{	f>>i>>j>>k;
				if (d[i]+k<d[j] || d[j]+k<d[i]) ok=0;
				else
				{	if (d[i]+k==d[j] || d[j]==INT_MAX) v[j]=1;
					if (d[j]+k==d[i] || d[i]==INT_MAX) v[i]=1;
				}
			}
			for (i=1; i<=n && ok; ++i)
				if (!v[i]) ok=0;
			if (ok) g<<"DA\n";
			else g<<"NU\n";
		}
	}
    return 0;
}