nq1s788

Дейкстра квадрат

Oct 5th, 2025
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.25 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.     vector<bool> used(n, false);
  38.     for (int _ = 0; _ < n; _++) {
  39.         int cur_rst = inf + 1;
  40.         int cur = -1;
  41.         for (int i = 0; i < n; i++) {
  42.             if (!used[i] && w[i] < cur_rst) {
  43.                 cur_rst = w[i];
  44.                 cur = i;
  45.             }
  46.         }
  47.         for (auto e : g[cur]) {
  48.             int nxt = e.first;
  49.             int cur_nxt_w = e.second;
  50.             if (w[nxt] > w[cur] + cur_nxt_w) {
  51.                 w[nxt] = w[cur] + cur_nxt_w;
  52.             }
  53.         }
  54.     }
  55.     for (auto e : w) cout << e << ' ';
  56.     return 0;
  57. }
  58.  
Advertisement
Add Comment
Please, Sign In to add comment