Cod sursa(job #524681)

Utilizator soare_cristian16Cristy93 soare_cristian16 Data 22 ianuarie 2011 16:32:27
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
const int N=50001;
vector<int> v[N],c[N];
int n,m,s,t,d[N],e[N],ver[N];
void bfs(int s)
{
	int st,dr,i;
	st=dr=1;
	d[st]=s;
	e[s]=0;
	while(st<=dr)
	{
		for(i=0;i<v[d[st]].size();i++)
		{
			if((!e[v[d[st]][i]]&&v[d[st]][i]!=s)||e[v[d[st]][i]]>e[d[st]]+c[d[st]][i])
			{
				d[++dr]=v[d[st]][i];
				e[v[d[st]][i]]=e[d[st]]+c[d[st]][i];
			}
		}
		st++;
	}
}
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];
		for(j=1;j<=n;j++)
		{
			v[i].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,0,sizeof(e));
		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;
}