Cod sursa(job #524688)

Utilizator soare_cristian16Cristy93 soare_cristian16 Data 22 ianuarie 2011 16:53:06
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
const int N=50001,inf=1<<30;
vector<int> v[N],c[N];
queue<int> d;
int n,m,s,t,e[N],ver[N];
void bfs(int s)
{
	int i;
	d.push(s);
	e[s]=0;
	while(!d.empty())
	{
		for(i=0;i<v[d.front()].size();i++)
		{
			if(e[v[d.front()][i]] > e[d.front()] + c[d.front()][i])
			{
				d.push(v[d.front()][i]);
				e[v[d.front()][i]]=e[d.front()]+c[d.front()][i];
			}
		}
		d.pop();
	}
}
int main()
{
	int i,j,x,y,co;
	bool ok;
	f>>t;
	for(i=1;i<=t;i++)
	{
		f>>n>>m>>s;
		for(j=1;j<=n;j++)
		{
			f>>ver[j];
			v[j].clear();
			c[j].clear();
		}
		for(j=1;j<=n;j++)
		{
			f>>x>>y>>co;
			v[x].push_back(y);
			v[y].push_back(x);
			c[x].push_back(co);
			c[y].push_back(co);
		}
		//memset(e,inf,sizeof(e));
		for(j=1 ; j<=n ; ++j)
			e[j] = inf;
		bfs(s);
		ok=true;
		for(j=1;j<=n&&ok;j++)
			if(ver[j]!=e[j])
				ok=false;
		if(ok)
			g<<"DA\n";
		else
			g<<"NU\n";
	}
	return 0;
}