Cod sursa(job #1044613)

Utilizator mircea.dobreanuMircea Dobreanu mircea.dobreanu Data 30 noiembrie 2013 08:30:58
Problema Distante Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<fstream>
#include<vector>
using namespace std;

const int MAXN=50005;
struct edge{int dest,cost;};
vector<edge> adj[MAXN];
ifstream fin("distante.in");
ofstream fout("distante.out");
int t,n,m,s;
int d[MAXN];

void solve()
{
	bool flag=true;
	int u,v;
	for (u=1; u<=n && flag; ++u)
	{
		for (vector<edge>::iterator v=adj[u].begin(); v!=adj[u].end(); ++v)
		{
			if (d[u]+v->cost<d[v->dest] || d[v->dest]+v->cost<d[u])
			{
				flag=false;
				break;
			}
		}
	}
	if (flag)
		fout<<"DA\n";
	else
		fout<<"NU\n";
}
void cleanup()
{
	for (int i=1; i<=n; ++i)
	{
		while (!adj[i].empty())
		{
			adj[i].pop_back();
		}
	}
}
int main()
{
	edge aux;
	int a,b,c;
	fin>>t;
	for (int k=1; k<=t; ++k)
	{
		fin>>n>>m>>s;
		for (int i=1; i<=n; ++i)
			fin>>d[i];
		for (int i=1; i<=n; ++i)
		{
			fin>>a>>b>>c;
			aux.dest=b;	aux.cost=c;
			adj[a].push_back(aux);
			aux.dest=a;
			adj[b].push_back(aux);
		}
		solve();
		cleanup();
	}
	fin.close();
	fout.close();
	return 0;
}