Cod sursa(job #2195155)

Utilizator gabriel-mocioacaGabriel Mocioaca gabriel-mocioaca Data 15 aprilie 2018 14:41:06
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <queue>

#define cin in
#define cout out

using namespace std;

int n, m, x, y;

struct neigh {
	int s;
	int d;
};

vector<list<neigh>> graph;

void read() {
	ifstream in("sate.in");
	cin >> n >> m >> x >> y;
	graph.resize(n + 1);

	for (int k = 1; k <= m; ++k) {
		int i, j, d;
		cin >> i >> j >> d;
		graph[i].push_back({ j,d });
		graph[j].push_back({ i,d });
	}

	in.close();
}

int bfs(int x, int y) {
	queue<int> q;
	vector<bool> vis(n + 1, false);
	int d = 0, i;
	q.push(x);
	vis[x] = true;

	while (!q.empty()) {
		i = q.front();
		q.pop();

		if (i == y) {
			return d;
		}

		for (const auto it : graph[i]) {
			if (!vis[it.s]) {
				vis[it.s] = true;
				q.push(it.s);
				if (it.s > i) d = d + it.d;
				else d = d - it.d;
				break;
			}
		}
	}

}

int main() {
	ofstream out("sate.out");
	read();
	cout << bfs(x, y);
	out.close();
	/*for (int i = 1; i <= n; ++i) {
		cout << i << ": ";
		for (const auto it : graph[i])
			cout << it.s << '-' << it.d << ' ';
		cout << endl;
	}*/
 	return 0;
}