Cod sursa(job #483178)

Utilizator petroMilut Petronela petro Data 7 septembrie 2010 10:16:45
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<fstream>
#include<vector>
#define mp make_pair
#define pb push_back
#define M 30005
#define inf 20000010
using namespace std;

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

vector< pair<long,long> > a[M];
vector< pair<long,long> > ::iterator it;
long n,m,d[M],X,Y;
queue<long> q;

void cit()
{
	long i,x,y,z;
	f>>n>>m>>X>>Y;
	
	for(i=1;i<=m;++i)
	{
		f>>x>>y>>z;
		a[x].pb(mp(y,z));
		a[y].pb(mp(x,z));
	}
	f.close();
}

void djk()
{
	long k;
	for(k=1;k<=n;++k)
		d[k]=inf;
	
	d[X]=0;
	q.push(X);
	viz[k]=0;
	while(!q.empty())
	{
		k=q.front();
		q.pop();
		viz[k]=0;
		for(it=a[k].begin();it!=a[k].end();++it)
			if(d[(*it).first]>d[k]+(*it).second) {d[(*it).first]=d[k]+(*it).second;
												  if(viz[(*it).first]==0) {q.push((*it).first);
																			viz[(*it).first]=1;}
												 }
	}
}

int main()
{
	cit();
	djk();
	g<<d[Y]<<"\n";
	g.close();
	return 0;
}