Cod sursa(job #483190)

Utilizator petroMilut Petronela petro Data 7 septembrie 2010 11:23:31
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<fstream>
#include<vector>
#include<queue>
#define mp make_pair
#define pb push_back
#define M 30005
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,viz[M];
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,p,cost;
	for(k=1;k<=n;++k)
		d[k]=-1;
	
	d[X]=0;
	q.push(X);
	
	while(!q.empty())
	{
		k=q.front();
		q.pop();
		
		if(k==Y) break;
		
		for(it=a[k].begin(); it!=at.end();++it)
		{	
			p=(*it).first;
			cost=(*it).second;
			
			if(d[p]==-1) if(k>X) if(p<X) d[p]=cost-d[k];
								 else if(p<k) d[p]=d[k]-cost;
									  else d[p]=d[k]+cost;
						 else if(p<k) d[p]=d[k]+cost;
							  else if(p<X) d[p]=d[x]-cost;
								   else d[p]=d[x]+cost;
		}
	}
	
}

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