nq1s788

Дейкстра

Oct 5th, 2025
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <set>
  3. #include <vector>
  4. #include <deque>
  5. #include <map>
  6. #include <cmath>
  7. #include <random>
  8.  
  9. #define se second
  10. #define fi first
  11. #define mp make_pair
  12. #define pb push_back
  13.  
  14. typedef long long ll;
  15. typedef long double ld;
  16.  
  17. using namespace std;
  18.  
  19. const int inf = (int)1e9;
  20.  
  21. int main() {
  22.     int n, m;
  23.     cin >> n >> m;
  24.     vector<vector<pair<int, int>>> g(n);
  25.     for (int i = 0; i < m; i++) {
  26.         int x, y, W;
  27.         cin >> x >> y >> W;
  28.         x--, y--;
  29.         g[x].push_back(make_pair(y, W));
  30.         g[y].push_back(make_pair(x, W));
  31.     }
  32.     int start;
  33.     cin >> start;
  34.     start--;
  35.     vector<int> w(n, inf);
  36.     w[start] = 0;
  37.     set<pair<int, int>> st;
  38.     for (int i = 0; i < n; i++) {
  39.         st.insert({w[i], i});
  40.     }
  41.     while (!st.empty()) {
  42.         pair<int, int> cur_pair = *st.begin();
  43.         st.erase(cur_pair);
  44.         int cur_rst = cur_pair.first;
  45.         int cur = cur_pair.second;
  46.         for (auto e : g[cur]) {
  47.             int nxt = e.first;
  48.             int cur_nxt_w = e.second;
  49.             if (w[nxt] > w[cur] + cur_nxt_w) {
  50.                 st.erase({w[nxt], nxt});
  51.                 w[nxt] = w[cur] + cur_nxt_w;
  52.                 st.insert({w[nxt], nxt});
  53.             }
  54.         }
  55.     }
  56.     for (auto e : w) cout << e << ' ';
  57.     return 0;
  58. }
  59.  
Advertisement
Add Comment
Please, Sign In to add comment