Cod sursa(job #2857887)

Utilizator vladp1324Vlad Pasare vladp1324 Data 26 februarie 2022 15:41:27
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>
#define ll long long

using namespace std;

ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");

int n, m, d[50001];
const int inf = 2e9;
vector < pair < int, int > > v[50001];
priority_queue < pair < int, int > > q;

void dijkstra (int nc) {
  for (int i = 2; i <= n; i++)
    d[i] = inf;
  q.push ({0, nc});
  while (not q.empty ()) {
    int nc = q.top ().second;
    q.pop ();
    for (int i = 0; i < v[nc].size (); i++) {
      int nv = v[nc][i].second;
      int cnv = v[nc][i].first;
      if (d[nc] + cnv < d[nv]) {
        d[nv] = d[nc] + cnv;
        q.push ({-d[nv], nv});
      }
    }
  }
}

int main()
{
  ios::sync_with_stdio(false);
  cin.tie(NULL);

  fin >> n >> m;
  for (int i = 1; i <= m; i++) {
    int x, y, c;
    fin >> x >> y >> c;
    v[x].push_back ({c, y});
  }
  dijkstra (1);
  for (int i = 2; i <= n; i++)
    if (d[i] == inf)
      fout << "0 ";
    else
      fout << d[i] << ' ';
  return 0;
}