Cod sursa(job #2416313)

Utilizator ApostolIlieDanielApostol Daniel ApostolIlieDaniel Data 27 aprilie 2019 12:52:47
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>

using namespace std;

using Edge = pair <int, int>;
const int MAXN = 5e4, INF = 1e9 + 7;

int dist[1 + MAXN];
vector <Edge> gr[1 + MAXN];
int n;

void dijkstra (int start) {
  int i;
  priority_queue <Edge> heap; /// it's not an edge i know
  heap.push ({0, start});
  for (i = 1; i <= n; i++)
    dist[i] = INF;
  dist[start] = 0;
  while (!heap.empty ()) {
    Edge nod = heap.top ();
    heap.pop ();
    nod.first = -nod.first;
    if (dist[nod.second] != nod.first)
      continue;
    for (Edge vec : gr[nod.second])
      if (dist[vec.first] > dist[nod.second] + vec.second) {
        dist[vec.first] = dist[nod.second] + vec.second;
        heap.push ({-dist[vec.first], vec.first});
      }
  }
}

int main() {
  int m, i, x, y, c;

  freopen ("dijkstra.in", "r", stdin);
  freopen ("dijkstra.out", "w", stdout);

  scanf ("%d%d", &n, &m);

  for (i = 1; i <= m; i++) {
    scanf ("%d%d%d", &x, &y, &c);
    gr[x].push_back ({y, c});
    gr[y].push_back ({x, c});
  }

  dijkstra (1);

  for (i = 2; i <= n; i++)
    printf ("%d ", dist[i]);
  return 0;
}