Cod sursa(job #632730)

Utilizator rusu_raduRusu Radu rusu_radu Data 12 noiembrie 2011 10:48:42
Problema Sate Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>
#include <cassert>
#include <algorithm>
#include <vector>
#include <queue>
#define Nmax 30005
#define InFile "sate.in"
#define OutFile "sate.out"
#define pb push_back

using namespace std;

int n, m, X, Y, viz[Nmax], d[Nmax];
vector <int> C[Nmax], A[Nmax];

void read();
void BFS(int);
void write();

int main ()
{
	assert (freopen (InFile, "r", stdin));
	assert (freopen (OutFile, "w", stdout));
	read();
	BFS (X);
	write();
	return 0;
}

void read()
{
	int i, x, y, c;
	scanf ("%d %d %d %d\n", &n, &m, &X, &Y);
	for (i=1; i<=m; i++)
	{
		scanf ("%d %d %d\n", &x, &y, &c);
		A[x].pb(y); C[x].pb(c);
		A[y].pb(x); C[y].pb(c);
	}
}

void BFS (int nd)
{
	int i, x, y, c, lg;
	queue <int> Q;
	viz[nd]=1;
	d[nd]=0;
	Q.push(nd);
	while (!Q.empty())
	{
		x=Q.front(); Q.pop();
		lg=A[x].size();
		for (i=0; i<lg; i++)
		{
			y=A[x][i]; c=C[x][i];
			if (y<x) c=-c;
			if (!viz[y])
			{
				viz[y]=1;
				d[y]=d[x]+c;
				Q.push (y);
			}
		}
	}
}

void write()
{
	printf ("%d\n", d[Y]);
}