Cod sursa(job #1040243)

Utilizator alex03mihaimihai alexandru alex03mihai Data 24 noiembrie 2013 11:32:54
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>
#include <vector>
#define NMAX 30005

using namespace std;

FILE * fin = fopen("sate.in", "r");
FILE * fout = fopen("sate.out", "w");

void citire();
void rezolvare();
void BFS(int);

int n, m, x, y;
vector <int> M[NMAX];
vector <int> C[NMAX];
int viz[NMAX];
int main()
{
	citire();
	rezolvare();
	return 0;
}

void citire()
{
	int i, a, b, c;
	fscanf(fin, "%d %d %d %d", &n, &m, &x, &y);
	for (i = 1; i <= m; i ++)
	{
		fscanf(fin, "%d %d %d", &a, &b, &c);
		M[a].push_back(b);
		C[a].push_back(c);
		M[b].push_back(a);
		C[b].push_back(-c);
	}
}

void rezolvare()
{
	BFS(x);
	fprintf(fout, "%d\n", viz[y]);
}

void BFS(int x)
{
	int i, Coada[NMAX], ic, sf, v;
	Coada[1] = x; viz[x] = 0;
	ic = 1; sf = 1;
	while (ic <= sf)
	{
		v = Coada[ic];
		ic ++;
		for (i = 0; i < M[v].size(); i ++)
			if (viz[M[v][i]] == 0)
			{
				sf ++;
				Coada[sf] = M[v][i];
				viz[M[v][i]] = viz[v] + C[v][i];
				if (M[v][i] == y)
				{
					ic = sf + 1;
					break;
				}
			}
	}
}