Cod sursa(job #2363917)

Utilizator vcerneaCernea Victor vcernea Data 3 martie 2019 18:54:49
Problema Sate Scor 45
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <bits/stdc++.h>

using namespace std;

vector<int> dis[30001];
vector<int> lda[40000];
bool viz[30100];
int dis1[30100];

int main() {

	int n, m, x, y;
	int t1, t2, d;
	ifstream cin("sate.in");
	ofstream cout("sate.out");

	cin >> n >> m >> x >> y;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			dis[i].push_back(0);
		}
	}
	for (int i = 0; i < m; i++) {
		cin >> t1 >> t2 >> d;
		lda[t1].push_back(t2);
		lda[t2].push_back(t1);
		dis[t1][t2] = d;
		dis[t2][t1] = d;
	}
	queue<int> q;
	for (auto &it: lda[x]) {
		if (!viz[it]) {
			q.push(it);
			viz[it] = true;
			if (x > it) {
				dis1[it] = dis1[x] - dis[x][it];
			} else {
				dis1[it] = dis1[x] + dis[x][it];
			}
		}
	}
	while (!q.empty()) {
		int now = q.front();
		q.pop();
		for (auto &it: lda[now]) {
			if (!viz[it]) {
				q.push(it);
				viz[it] = true;
				if (now > it) {
					dis1[it] = dis1[now] - dis[now][it];
				} else {
					dis1[it] = dis1[now] + dis[now][it];
				}
			}
		}
	}
	cout << dis1[y];


	return 0;
}