1 条题解
-
0
#include <bits/stdc++.h> using u32 = unsigned; using i64 = long long; using u64 = unsigned long long; using u128 = unsigned __int128; constexpr i64 inf = 1E18; int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n, m, S, T; std::cin >> n >> m >> S >> T; int H; std::cin >> H; std::vector<std::vector<std::pair<int, i64>>> e(n + 1); for (int i = 1; i <= m; i ++) { int u, v; i64 w; std::cin >> u >> v >> w; e[u].push_back({v, w}); e[v].push_back({u, w}); } auto dijkstra = [&](int st) -> std::vector<i64> { std::vector<i64> dist(n + 1, inf); std::vector<bool> vis(n + 1); std::priority_queue<std::pair<i64, int>, std::vector<std::pair<i64, int>>, std::greater<std::pair<i64, int>>> q; q.push({0, st}); dist[st] = 0; while (q.size()) { auto [x, t] = q.top(); q.pop(); if (vis[t]) { continue; } vis[t] = true; for (auto [v, w] : e[t]) { if (dist[v] > dist[t] + w) { dist[v] = dist[t] + w; q.push({dist[v], v}); } } } return dist; }; auto disA = dijkstra(S), disB = dijkstra(T); std::cout << ((disA[H] == inf || disB[H] == inf) ? -1 : disA[H] + disB[H]) << "\n"; return 0; }
- 1
信息
- ID
- 192
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 44
- 已通过
- 9
- 上传者