Cod sursa(job #67553)

Utilizator gcosminGheorghe Cosmin gcosmin Data 25 iunie 2007 11:30:36
Problema Sate Scor 80
Compilator cpp Status done
Runda preONI 2007, Runda Finala, Clasa a 9-a si gimnaziu Marime 0.89 kb
#include <stdio.h>
#include <vector>
using namespace std;

#define NMAX 30010
#define MP make_pair

int N, M, beg, end;

int rez = 0;

vector <pair<int, int> > leg[NMAX];

char viz[NMAX];

inline void SWAP(int &x, int &y)
{
	int aux = x;
	x = y;
	y = aux;
}


void back(int x, int dst)
{	
	if (x == end) rez = dst;

	viz[x] = 1;

	vector <pair<int, int> > :: iterator it;

	for (it = leg[x].begin(); it != leg[x].end(); ++it)
		if (!viz[(*it).first]) {
			back((*it).first, dst + (*it).second);
		}
}

int main()
{
	int i, x, y, c;

	freopen("sate.in", "r", stdin);
	freopen("sate.out", "w", stdout);

	scanf("%d %d %d %d", &N, &M, &beg, &end);

	if (beg > end) SWAP(beg, end);

	for (i = 1; i <= M; i++) {
		scanf("%d %d %d", &x, &y, &c);

		if (x > y) SWAP(x, y);

		leg[x].push_back(MP(y, c));
		leg[y].push_back(MP(x, -c));
	}

	back(beg, 0);

	printf("%d\n", rez);

fclose(stdin);
fclose(stdout);
return 0;
}