Advertisement
matheus_monteiro

Dijkstra

Aug 3rd, 2024
324
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.91 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define OO 10000000
  6.  
  7. int n, m;
  8. vector<vector<pair<int, int>>> G;
  9.  
  10. int dijkstra(int source, int dst) {
  11.     vector<int> dist(n + 2, OO);
  12.     priority_queue<pair<int, int>> pq;
  13.  
  14.     dist[source] = 0;
  15.     pq.push({0, source});
  16.  
  17.     while(!pq.empty()) {
  18.         auto [d, v] = pq.top();
  19.         d *= -1;
  20.         pq.pop();
  21.         if(d > dist[v])
  22.             continue;
  23.         for(auto [u, cost] : G[v]) {
  24.             if(dist[u] > dist[v] + cost) {
  25.                 dist[u] = dist[v] + cost;
  26.                 pq.push({-dist[u], u});
  27.             }
  28.         }
  29.     }
  30.     return dist[dst];
  31. }
  32.  
  33. int main(){
  34.     cin >> n >> m;
  35.  
  36.     G.resize(n + 2);
  37.     for(int i = 0; i < m; ++i) {
  38.         int u, v, w;
  39.         cin >> u >> v >> w;
  40.         G[u].push_back({v, w});
  41.         G[v].push_back({u, w});
  42.     }
  43.  
  44.     cout << dijkstra(0, n + 1) << '\n';
  45.  
  46.     return 0;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement