Cod sursa(job #2878174)

Utilizator AndreiV03Andrei Voicu AndreiV03 Data 25 martie 2022 22:36:56
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>
using namespace std;

#define inf (1 << 30)

ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");

int n, m;
vector<vector<pair<int, int>>> G;
vector<int> D;
bitset<50001> AP;

struct compare {
  bool operator() (int x, int y) {
    return D[x] > D[y];
  }
};

void dijkstra(int k) {
  priority_queue<int, vector<int>, compare> Q;
  Q.push(k);
  AP[k] = 1;
  D[k] = 0;
  
  while (!Q.empty()) {
    int x = Q.top();
    Q.pop();
    AP[x] = 0;
    
    for (auto y : G[x]) {
      int v = y.first;
      int c = y.second;
      
      if (D[x] + c < D[v]) {
        D[v] = D[x] + c;
        
        if (AP[v] == 0) {
          Q.push(v);
          AP[v] = 1;
        }
      }
    }
  }
}

int main() {
  cin >> n >> m;
  G = vector<vector<pair<int, int>>> (n + 1);
  D = vector<int> (n + 1, inf);
  
  for (int i = 1, a, b, c; i <= m; ++i)
    cin >> a >> b >> c, G[a].push_back(make_pair(b, c));

  dijkstra(1);

  for (int i = 2; i <= n; ++i)
    if (D[i] != inf) cout << D[i] << " ";
    else cout << "0 ";

  cin.close();
  cout.close();
  return 0;
}