Cod sursa(job #1388026)

Utilizator radudorosRadu Doros radudoros Data 15 martie 2015 00:39:08
Problema Distante Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<fstream>
#include<vector>
#include<bitset>
#include<string>
using namespace std;
const int nmax = 50001;
ifstream fin("distante.in");
ofstream fout("distante.out");
vector<pair<int, int>> v[nmax];
int d[nmax];
bitset<nmax> viz;
bool g = 0;
int sursa;
void dfs(int s,int c)
{
	viz[s] = 1;
	if (d[s] != c&&g==0)
	{
		g = 1;
		fout << "NU\n";
	}
	for (auto it : v[s])
	{
		if (!viz[it.first])
			dfs(it.first,c+it.second);
	}
	if (s == sursa&& g == 0)
		fout << "DA\n";

}


int main()
{
	int t;
	fin >> t;
	for (; t; t--)
	{
		int n, m;
		fin >> n >> m >> sursa;
		for (int i = 1; i <= n; i++)
		{
			fin >> d[i];
		}
		for (int i = 1; i <= m; i++)
		{
			int x, y, w;
			fin >> x >> y >> w;
			v[x].push_back(make_pair(y, w));
			v[y].push_back(make_pair(x, w));
		}
		string rsp = "DA\n";
		for (int i = 1; i <= n; i++)
		{
			for (auto it : v[i])
			if ((d[i] + it.second < d[it.first]) || (d[it.first] + it.second <d[i]))
					rsp = "NU\n";
		}
		fout << rsp;
		for (int i = 1; i <= n; i++)
		{
			viz[i] = 0;
			v[i].clear();
		}
		g = 0;
	}

}