Cod sursa(job #516024)

Utilizator siminescuPaval Cristi Onisim siminescu Data 22 decembrie 2010 22:16:08
Problema Distante Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<fstream>
#include<vector>
#include<queue>
using namespace std;

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

#define nmax 50002
typedef struct noduri{int vec,dist;};
noduri aux;
vector <noduri> v[nmax];
queue <int> Q;
int n,m,t,S,d[nmax],l[nmax];
bool inQ[nmax];

void afisare()
{
	int i;
	if(d[S])
	{
		g<<"NU"<<'\n'; return;
	}
	for(S=1;S<=n;S++)
	for(i=0;i<l[S];i++)
		if(d[v[S][i].vec]>d[S]+v[S][i].dist)
		{
			g<<"NU"<<'\n';
			return;
		}
	g<<"DA"<<'\n';
	return;
}
int main()
{
	f>>t;
	int i;
	for(;t;--t)
	{
		f>>n>>m>>S;
		for(i=1;i<=n;i++)
		{
			f>>d[i];
			l[i]=0;
			while(!v[i].empty()) v[i].pop_back();
		}
		d[S]=0;
		for(;m;--m)
		{
			f>>i>>aux.vec>>aux.dist;
			v[i].push_back(aux);
		}
		for(i=1;i<=n;i++) l[i]=v[i].size();
		afisare();
	}
}