Cod sursa(job #2923537)

Utilizator PopaMihaimihai popa PopaMihai Data 15 septembrie 2022 15:18:32
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

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

using PII = pair < int, int >;

const int NMAX = 1e5 + 3;

vector < PII > G[NMAX];

priority_queue < PII, vector < PII >, greater < PII > > H;

int d[NMAX];
bool sel[NMAX];

int N, M;

void dijkstra(int first)
{
   int node = first;

   while(node) {
      sel[node] = true;

      for(auto it: G[node])
         if(!sel[it.second])
            H.push({d[node] + it.first, it.second});

      PII Next = {0, 0};

      while(!H.empty() && sel[H.top().second])
         H.pop();

      if(!H.empty())
         Next = H.top();

      d[Next.second] = Next.first;
      node = Next.second;
   }
}

int main()
{
   fin >> N >> M;
   for(int i = 1; i <= M; ++i) {
      int x, y, g;
      fin >> x >> y >> g;

      G[x].push_back({g, y});
      G[y].push_back({g, x});
   }

   dijkstra(1);

   for(int i = 2; i <= N; ++i)
      fout << d[i] << ' ';
   return 0;
}