Cod sursa(job #3373865)

Utilizator lefterache_stefanLefterache Stefan lefterache_stefan Data 7 noiembrie 2026 23:15:19
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("sate.in");
ofstream fout("sate.out");

const int MAXIM = 30005;
vector<pair<int, int>> graf[MAXIM];
vector<pair<int, int>> grafInvers[MAXIM];
map<pair<int, int>, int> muchii;

optional<int> dist(const int a, const int b) {
	vector<bool> vizitat(MAXIM, false);
	queue<pair<int, int>> q;
	q.push({a, 0});
	vizitat[a] = true;

	while (!q.empty()) {
		const auto [sat, scor] = q.front();
		q.pop();

		if (sat == b) {
			return abs(scor);
		}

		for (const auto [vecin, d] : graf[sat]) {
			if (!vizitat[vecin]) {
				vizitat[vecin] = true;
				q.push({vecin, scor + d});
			}
		}
		for (const auto [vecin, d] : grafInvers[sat]) {
			if (!vizitat[vecin]) {
				vizitat[vecin] = true;
				q.push({vecin, scor - d});
			}
		}
	}
	return nullopt;
}

int main() {
	int n, m, x, y;
	fin >> n >> m >> x >> y;
	for (int i = 0; i < m; i++) {
		int a, b, c;
		fin >> a >> b >> c;
		graf[a].push_back({b, c});
		grafInvers[b].push_back({a, c});
		muchii[{a, b}] = c;
	}
	fout << dist(x, y).value();
}