Cod sursa(job #2427124)

Utilizator retrogradLucian Bicsi retrograd Data 30 mai 2019 22:42:26
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>

using namespace std;

vector<int> Dijkstra(vector<vector<pair<int, int>>>& graph) {
    vector<int> dist(graph.size(), 2e9);
    auto cmp = [&](int a, int b) {
        return dist[a] > dist[b];
    };
    priority_queue<int, vector<int>, decltype(cmp)> pq(cmp);
    auto push = [&](int node, int d) {
        if (dist[node] <= d) return;
        dist[node] = d;
        pq.push(node);
    };
    push(0, 0);
    while (!pq.empty()) {
        auto node = pq.top();
        pq.pop();
        for (auto itr : graph[node])
            push(itr.first, dist[node] + itr.second);
    }
    for (int i = 0; i < (int)dist.size(); ++i)
        if (dist[i] == 2e9)
            dist[i] = 0;
    return dist;
}

int main() {
    ifstream cin("dijkstra.in");
    ofstream cout("dijkstra.out");
    int n, m; cin >> n >> m;
    vector<vector<pair<int, int>>> graph(n);
    for (int i = 0; i < m; ++i) {
        int a, b, c; cin >> a >> b >> c; --a; --b;
        graph[a].emplace_back(b, c);
        graph[b].emplace_back(a, c);
    }
    auto dist = Dijkstra(graph);
    for (int i = 1; i < n; ++i)
        cout << dist[i] << " ";
    cout << endl;

    return 0;
}