Cod sursa(job #2857895)

Utilizator vladp1324Vlad Pasare vladp1324 Data 26 februarie 2022 16:01:47
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 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;
bool ver[50001];

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 ();
    if (not ver[nc]) {
      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});
        }
      }
      ver[nc] = true;
    }
  }
}

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;
}