Cod sursa(job #524539)

Utilizator zalmanDanci Emanuel Sebastian zalman Data 22 ianuarie 2011 13:08:20
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>
#include <iostream>
#include <vector>
#include <queue>
#define NMAX 30010
using namespace std;

FILE *f = fopen("sate.in", "r");
FILE *g = fopen("sate.out", "w");
vector< pair<int,int> > v[NMAX];
queue<int> q;
int N, M, X, Y, i, j, d[NMAX], D;

void read(void)
{

	fscanf(f, "%d%d%d%d", &N, &M, &X, &Y);
	while(M--)
	{
		fscanf(f, "%d%d%d", &i, &j, &D);
		v[i].push_back( make_pair(j, D) );
		v[j].push_back( make_pair(i, -D));
	}
	
	fclose(f);
}


void solve(void)
{
	q.push(X);
	d[X] = 1;
	
	while(!q.empty())
	{
		int nod = q.front();
		q.pop();
	
		for(i = 0; i < v[nod].size(); ++i)
		{
			int adiacNod = v[nod][i].first;
			if(!d[adiacNod])
			{
				q.push(adiacNod);
				d[adiacNod] = d[nod] + v[nod][i].second;
				if(adiacNod == Y)
				{
					fprintf(g, "%d", d[Y] - 1);
					fclose(g);
					return;
				}
			}
		}
	}
}
int main(void)
{
	read();
	solve();
	
	return 0;
}