Advertisement
nq1s788

Untitled

Mar 23rd, 2025
378
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.91 KB | None | 0 0
  1. В этой задаче нужно реализовать алгоритм Дейкстры за O(mlogn). Про алгоритм можно почитать здесь https://ru.algorithmica.org/cs/shortest-paths/dijkstra/
  2.  
  3. Я подписала в задаче, к сожалению в реализации используется сет на дереве, в ванильном питоне он не реализован, пример реализации на c++:
  4. vector<int> dijkstra(int s) {
  5.     vector<int> d(n, inf);
  6.     d[root] = 0;
  7.     set< pair<int, int> > q;
  8.     q.insert({0, s});
  9.     while (!q.empty()) {
  10.         int v = q.begin()->second;
  11.         q.erase(q.begin());
  12.         for (auto [u, w] : g[v]) {
  13.             if (d[u] > d[v] + w) {
  14.                 q.erase({d[u], u});
  15.                 d[u] = d[v] + w;
  16.                 q.insert({d[u], u});
  17.             }
  18.         }
  19.     }
  20.     return d;
  21. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement