Cod sursa(job #3324550)

Utilizator rmntRadu Muntean rmnt Data 22 noiembrie 2025 14:19:15
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

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

const int nmax = 100;
const int 🥚🥚 = 1e9;
int n, m;
vector<pair<int, int>> g[nmax + 5];
int d[nmax + 5];
bool viz[nmax + 5];

priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;

int find_min()
{
  while (viz[pq.top().second])
    pq.pop();
  int min = pq.top().second;
  pq.pop();
  return min;
}

void dijkstra()
{
  for (int i = 2; i <= n; i++)
    d[i] = 🥚🥚;

  for (int i = 1; i <= n; i++)
    pq.push(make_pair(d[i], i));

  for (int i = 1; i <= n; i++)
  {
    int Min = 🥚🥚, nod;
    nod = find_min();
    viz[nod] = true;
    for (auto v : g[nod])
    {
      int vecin = v.first;
      int cost = v.second;
      if (d[vecin] > d[nod] + cost)
      {
        d[vecin] = d[nod] + cost;
        pq.push(make_pair(d[vecin], vecin));
      }
    }
  }
}

int main()
{
  fin >> n >> m;
  for (int i = 1; i <= m; i++)
  {
    int x, y, c;
    fin >> x >> y >> c;
    g[x].push_back(make_pair(y, c));
  }
  dijkstra();
  for (int i = 2; i <= n; i++)
    fout << d[i] << " ";
  fout << "\n";
  return 0;
}