Cod sursa(job #456049)

Utilizator bog29Antohi Bogdan bog29 Data 14 mai 2010 19:30:46
Problema Sate Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<fstream>
#include<vector>
#include<queue>
#define dmax 30005
using namespace std;
ifstream in("sate.in");
ofstream out("sate.out");

int n,m,s,f,ok;
bool t[dmax];

struct drum
{	int v;
	long long c;
};	

vector<struct drum>g[dmax];
vector<struct drum>::iterator it;
queue<struct drum>q;

void bfs()
{	int i;
	drum crt,w;
	w.v=s;
	w.c=0;
	q.push(w);
	t[s]=1;
	ok=1;
	while(!q.empty() && ok)
	{	crt=q.front();
		q.pop();
		if(crt.v==f)
		{	out<<crt.c;
			ok=0;
		}
		for(it=g[crt.v].begin();it<g[crt.v].end();it++)
			if(!t[it->v])
			{	w.v=it->v;
				if(it->v > crt.v)
					w.c=crt.c+it->c;
				else w.c=crt.c-it->c;
				q.push(w);
			}	
	}
}

int main()
{	long long i,a,b,ct;
	drum z;
	in>>n>>m>>s>>f;
	if(s>f)
	{	i=f;
		f=s;
		s=i;
	}	
	for(i=1;i<=m;i++)
	{	in>>a>>b>>ct;
		z.v=b;
		z.c=ct;	
		g[a].push_back(z);
		z.v=a;
		g[b].push_back(z);
	}
	in.close();
	bfs();
	in.close();
	return 0;
}