Cod sursa(job #1125943)

Utilizator andy1496Casu-Pop Andrei andy1496 Data 26 februarie 2014 20:22:50
Problema Sate Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#include <algorithm>
#include <vector>
#include <deque>
using namespace std;




int main() {


	freopen("sate.in", "r", stdin);
	freopen("sate.out", "w", stdout);
	vector <int> v[30000];
	deque <int> que;
	vector <long long> edge[30000];
	int n, m, i, j, s, f, q, x, y;
	long long d;
	scanf("%d %d %d %d", &n, &m, &s, &f);
	
	vector <int> viz(n+1, 0);
	vector <long long> dis(n + 1, 0);
	//v = new vector<int>[n];
	//edge = new vector<long long>[n];
	
	
	
	for (i = 0; i < m; i++) {
		scanf("%d %d %lld", &x, &y, &d);
		v[x].push_back(y);
		edge[x].push_back(d);

		v[y].push_back(x);
		edge[y].push_back(-d);
	}

	

	
	viz[s] = 1;
	dis[s] = 0;
	que.push_back(s);
	while (!que.empty()) {
		q = que.front();
		que.pop_front();
		if (v[q].empty()) continue;
		for (i = 0; i < v[q].size(); i++) {
			if (viz[v[q][i]] == 0) {
				dis[v[q][i]] += dis[q] + edge[q][i];
				viz[v[q][i]] = 1;
				que.push_back(v[q][i]);
			}
		}

	}

	printf("%lld", dis[f]);



	return 0;
}