Cod sursa(job #2854199)

Utilizator vlad2009Vlad Tutunaru vlad2009 Data 21 februarie 2022 00:26:41
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <vector>
#include <queue>

const int MAX_N = 50000;
const int INF = (1 << 30);
int distMin[1 + MAX_N];
bool viz[1 + MAX_N];
std::vector<std::pair<int, int>> children[1 + MAX_N];
std::priority_queue<std::pair<int, int>> q;

void Dijkstra(int n, int start) {
  for (int i = 1; i <= n; i++) {
    distMin[i] = INF;
  }
  q.push({0, start});
  distMin[start] = 0;
  viz[start] = true;
  while (!q.empty()) {
    int u = q.top().second;
    q.pop();
    for (auto it : children[u]) {
      int v = it.first;
      int cost = it.second;
      if (!viz[v]) {
        if (distMin[u] + cost < distMin[v]) {
          distMin[v] = distMin[u] + cost;
          q.push({-distMin[v], v});
          viz[v] = true;
        }
      }
    }
  }
}

int main() {
  std::ifstream fin("dijkstra.in");
  std::ofstream fout("dijkstra.out");
  int n, m;
  fin >> n >> m;
  for (int i = 1; i <= m; i++) {
    int u, v, dist;
    fin >> u >> v >> dist;
    children[u].push_back({v, dist});
    // children[v].push_back({u, dist});
  }
  Dijkstra(n, 1);
  for (int i = 2; i <= n; i++) {
    fout << (distMin[i] == INF ? 0 : distMin[i]) << " ";
  }
  return 0;
}