Pagini recente » Cod sursa (job #3327119) | Cod sursa (job #3349728) | Cod sursa (job #3300126) | Cod sursa (job #143057) | Cod sursa (job #3320406)
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
int sate(int start, int end, vector<vector<pair<int, int>>>& adj,
vector<int>& visited, queue<int>& q) {
q.push(start);
while (!q.empty()) {
int node = q.front();
q.pop();
for (pair<int, int> neighbor : adj[node]) {
if (!visited[neighbor.first]) {
visited[neighbor.first] =
visited[node] + neighbor.second;
if (neighbor.first == end) {
return visited[neighbor.first];
}
q.push(neighbor.first);
}
}
}
return -1; // edge case that should not happen
}
int main() {
vector<vector<pair<int, int>>> dist;
vector<int> visited;
queue<int> q;
int n, m, x, y;
fin >> n >> m >> x >> y;
dist.resize(n + 1);
visited.resize(n + 1, 0);
for (int i = 0; i < m; ++i) {
int u, v, len;
fin >> u >> v >> len;
dist[u].push_back({v, len});
dist[v].push_back({u, -len});
}
fout << sate(x, y, dist, visited, q);
return 0;
}