Advertisement
vitormartinotti

Untitled

Nov 7th, 2024
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define MAXN 100
  3. #define pii pair<int,int>
  4.  
  5. const int INF = 1e9+10;
  6.  
  7. using namespace std;
  8.  
  9. vector<pii> grafo[MAXN];
  10. vector<int> dist(MAXN, INF); //dist[i]: menor distância de s até i
  11. int pai[MAXN];
  12.  
  13. void dijkstra(int s){
  14.     set<pii> q;
  15.     q.insert({0,s});
  16.     dist[s] = 0;
  17.  
  18.     while(!q.empty()){
  19.         int v = q.begin()->second;
  20.         q.erase(q.begin());
  21.         for(int i = 0; i < grafo[v].size(); i++){
  22.             pii viz = grafo[v][i];
  23.             int u = viz.second;
  24.             int w = viz.first;
  25.             if(dist[v]+w < dist[u]){
  26.                 pai[u] = v;
  27.                 q.erase({dist[u], u});
  28.                 q.insert({dist[v]+w, u});
  29.                 dist[u] = dist[v]+w;
  30.             }
  31.         }
  32.     }
  33. }
  34.  
  35. int main(){
  36.     int n, m; scanf("%d %d", &n, &m);
  37.  
  38.     while(m--){
  39.         int a, b, c; scanf("%d %d %d", &a, &b, &c);
  40.         grafo[a].push_back({c,b});
  41.         //grafo[b].push_back({c,a});
  42.     }
  43.  
  44.     for(int i = 0; i < n; i++){
  45.         pai[i] = i;
  46.     }
  47.    
  48.     dijkstra(0);
  49.  
  50.     vector<int> caminho;
  51.     int p = n-1;
  52.     while(pai[p] != p){
  53.         caminho.push_back(p);
  54.         p = pai[p];
  55.     }
  56.     caminho.push_back(0);
  57.    
  58.     for(int i = 0; i < n; i++){
  59.         printf("%d ", dist[i]);
  60.     }
  61. }
  62.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement