Cod sursa(job #2683679)

Utilizator ioana.jianuIoana Jianu ioana.jianu Data 11 decembrie 2020 22:44:15
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 5e4 + 5;
const int INF = 2e9;
int d[NMAX];
vector <pair <int, int>> v[NMAX];
bool selectat[NMAX];
int n;

void dijkstra(int x0) {
    priority_queue <pair<int, int>> h;
    for (int i = 1; i <= n; i++)
        d[i] = INF;
    x0 = 1;
    d[x0] = 0;
    h.push({0, x0});
    while (!h.empty()) {
        while (!h.empty() && selectat[h.top().second])
            h.pop();
        if (h.empty())
            break;
        int x = h.top().second;
        selectat[x] = true;
        h.pop();
        for (auto m : v[x]) {
            int y = m.second;
            int c = m.first;
            if (d[x] + c < d[y]) {
                d[y] = d[x] + c;
                h.push({-d[y], y});
            }
        }
    }
}

int main() {

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

    int m;

    cin >> n >> m;
    int a, b, c;
    for (int i = 1; i <= m; i++) {
        scanf ("%d%d%d", &a, &b, &c);
        v[a].push_back({c, b});
    }
    dijkstra(1);
    for (int x = 2; x <= n; x++)
        cout << d[x] << " ";

    return 0;
}