Pagini recente » Cod sursa (job #2982951) | Cod sursa (job #3255400) | Cod sursa (job #3169861) | Cod sursa (job #3004001) | Cod sursa (job #2941274)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
int main() {
std::ifstream input("sate.in");
std::ofstream output("sate.out");
int n, m, x, y;
input >> n >> m >> x >> y;
std::vector<std::vector<std::pair<int, int>>> graph;
graph.resize(n + 1);
for (int i = 1; i <= m; ++i) {
int p, q, d;
input >> p >> q >> d;
graph[p].push_back({q, d});
graph[q].push_back({p, d});
}
std::vector<int> dist;
dist.resize(n + 1, 0);
dist[x] = 0;
std::vector<bool> visited;
visited.resize(n + 1, false);
visited[x] = true;
std::queue<int> queue;
queue.push(x);
while (!queue.empty()) {
int top = queue.front();
queue.pop();
for (auto const &node: graph[top]) {
if (!visited[node.first]) {
queue.push(node.first);
visited[node.first] = true;
dist[node.first] = dist[top] + (node.first < top ? -1 : 1) * node.second;
}
}
}
output << dist[y];
return 0;
}