Cod sursa(job #1732164)

Utilizator theo.stoicanTheodor Stoican theo.stoican Data 20 iulie 2016 23:29:14
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

vector<vector<pair<int, int> > > g;
vector<int> dist;
int n,m,s;

bool checkDijkstra()
{
	if (dist[s] != 0)
		 return false;
	vector<bool> found (n+1, false);
	found[s] = true;
	for (int i = 1; i <= n; i++)
	{
//		found = false;
		for (int j = 0; j < g[i].size(); j++)
		{
			if (g[i][j].first != s )
			{
				if (dist[g[i][j].first] > dist[i] + g[i][j].second)
				{
					return false;
				}
				if (dist[g[i][j].first] == dist[i] + g[i][j].second)
				{
					found[g[i][j].first] = true;
				}
			}
		}
	}
	for (int  i = 1; i<=n;i++)
	{
		if (found[i] == false)
			return false;
	}
	return true;
}

int main()
{
	int t;
	fin>>t;
	while (t != 0)
	{
		fin>>n>>m>>s;
		g.resize(n+1);
		dist.resize(n+1);
		for (int i = 1; i <= n; i++)
			fin>>dist[i];
		for (int i = 1; i <= m; i++)
		{
			int a,b,c;
			fin>>a>>b>>c;
			g[a].push_back(make_pair(b,c));
			g[b].push_back(make_pair(a,c));
		}
		if (checkDijkstra() == false)
		{
			fout<<"NU\n";
		}
		else 
			fout <<"DA\n";
		t--;
	}
}