Cod sursa(job #2815741)

Utilizator PetyAlexandru Peticaru Pety Data 10 decembrie 2021 10:35:49
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>
 
using namespace std;
 
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
 
const int INF = (1 << 30);
 
struct arc{
  int y, c, cnt;
};
 
vector<arc>v[50002];
int n, m, x, y, c, d[50002], inq[50002];
 
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>>pq;
 
int main()
{
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    cin >> x >> y >> c;
    v[x].push_back({y, c, 0});
  }
  for (int i = 2; i <= n; i++)
    d[i] = INF;
  pq.push({0, 1});
  bool ok = 1;
  while (!pq.empty() && ok) {
    int nod = pq.top().second;
    int val = pq.top().first;
    pq.pop();
    if (d[nod] != val)
      continue;
    for (auto &it: v[nod]) {
      if (d[nod] + it.c < d[it.y]) {
      //  it.cnt++;
        //if (it.cnt >= n) {
          //ok = 0;
          //break;
        //}
        d[it.y] = d[nod] + it.c;
        pq.push({d[it.y], it.y});
      }
    }
  }
  //if (!ok)
    //fout << "Ciclu negativ!";
  for (int i = 2; i <= n; i++)
    if (d[i] != INF)
      cout << d[i] << " ";
    else
      cout << "0 ";
  return 0;
}