rembocoder

Untitled

Feb 16th, 2023
823
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.42 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define int int64_t
  6.  
  7. vector<vector<pair<int, int>>> g;
  8.  
  9. void dijkstra(int n, int st, vector<int>& d, vector<int>& p) {
  10.     d.resize(n, 2e18);
  11.     p.resize(n, -1);
  12.     priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
  13.     d[st] = 0;
  14.     pq.push({d[st], st});
  15.     vector<bool> handled(n);
  16.     while (!pq.empty()) {
  17.         int v = pq.top().second;
  18.         pq.pop();
  19.         if (handled[v]) {
  20.             continue;
  21.         }
  22.         handled[v] = true;
  23.         for (auto [to, len]: g[v]) {
  24.             if (d[to] > d[v] + len) {
  25.                 d[to] = d[v] + len;
  26.                 p[to] = v;
  27.                 pq.push({d[to], to});
  28.             }
  29.         }
  30.     }
  31. }
  32.  
  33. int32_t main() {
  34.     ios_base::sync_with_stdio(false);
  35.     cin.tie(0); cout.tie(0);
  36.     int n, m;
  37.     cin >> n >> m;
  38.     g.resize(n);
  39.     for (int i = 0; i < m; i++) {
  40.         int a, b, c;
  41.         cin >> a >> b >> c;
  42.         a--; b--;
  43.         g[a].push_back({b, c});
  44.         g[b].push_back({a, c});
  45.     }
  46.     vector<int> d, p;
  47.     dijkstra(n, 0, d, p);
  48.     int cur = n - 1;
  49.     if (p[cur] == -1) {
  50.         cout << -1 << '\n';
  51.         return 0;
  52.     }
  53.     vector<int> path;
  54.     while (cur != -1) {
  55.         path.push_back(cur);
  56.         cur = p[cur];
  57.     }
  58.     reverse(path.begin(), path.end());
  59.     for (int v: path) {
  60.         cout << v + 1 << ' ';
  61.     }
  62. }
  63.  
Advertisement
Add Comment
Please, Sign In to add comment