Cod sursa(job #903894)

Utilizator nutipasa16Macovei Claudiu nutipasa16 Data 3 martie 2013 12:29:52
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<fstream>
#include<vector>
#include<queue>
#define inf 5000000
#define Mmax 50001
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
struct punct
{
	int x,c;
};
vector < punct > a[Mmax];
vector <int> d(Mmax,inf);
queue <int> q;
int n,m,x,y,z,s,corect,nod,cost,aux,T,test[Mmax];
void dijkstra(int s)
{
	q.push(s);
	d[s]=0;
	while(!q.empty())
	{
		aux=q.front();
		q.pop();
		for(unsigned int i=0;i<a[aux].size();++i)
		{
			cost=a[aux][i].c;
			nod=a[aux][i].x;
			if(d[nod]>d[aux]+cost)
			{
				d[nod]=d[aux]+cost;
				q.push(nod);
			}
		}
	}
}
int main()
{
	f>>T;
	for(;T--;)
	{
		f>>n>>m>>s;
		for(register int i=1;i<=n;i++)
			f>>test[i];
		punct aux1;
		for(register int i=1;i<=m;++i)
		{
			f>>x>>y>>z;
			aux1.x=y;
			aux1.c=z;
			a[x].push_back(aux1);
		}
		dijkstra(s); 
		corect=1;
		for(register int i=1;i<=n;++i)
			if(d[i]!=test[i])
			{
				corect=0;
				i=n+1;
			}
		if(corect)
			g<<"DA\n";
		else
			g<<"NU\n";
	}
	return 0;
}