Pagini recente » Clasamentul arhivei de probleme | Borderou de evaluare (job #2854190) | Rating Lazar Livia (lazarlivia) | Borderou de evaluare (job #522095) | Cod sursa (job #1468010)
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int points, relations, source, destination;
vector<pair<int, int>> adj_graph[30005];
int distances[30005];
queue<int> to_visit;
int main() {
freopen("sate.in", "r", stdin);
freopen("sate.out", "w", stdout);
scanf("%d %d %d %d", &points, &relations, &source, &destination);
for (int i = 0; i < relations; i++) {
int from, to, cost;
scanf("%d %d %d", &from, &to, &cost);
adj_graph[from].push_back(make_pair(to, cost));
adj_graph[to].push_back(make_pair(from, -cost));
}
for (int i = 0; i <= points; i++)
distances[i] = 20000005;
to_visit.push(source);
distances[source] = 0;
while (distances[destination] == 20000005) {
int current = to_visit.front();
to_visit.pop();
for (pair<int, int> next : adj_graph[current]) {
if (distances[next.first] == 20000005) {
distances[next.first] = distances[current] + next.second;
to_visit.push(next.first);
}
}
}
printf("%d\n", distances[destination]);
return 0;
}