Cod sursa(job #2603143)

Utilizator gabib97Gabriel Boroghina gabib97 Data 18 aprilie 2020 17:20:10
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <bits/stdc++.h>

using namespace std;

vector<int> dijkstra(int n, vector<pair<int, int>> adj[]) {
    vector<int> dist(n + 1, INT_MAX);
    dist[1] = 0;

    auto cmp = [&dist](const pair<int, int> &a, const pair<int, int> &b) {
        return dist[a.first] > dist[b.first];
    };
    priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)> Q(cmp);

    Q.push(make_pair(1, 0));
    while (!Q.empty()) {
        pair<int, int> pp = Q.top();
        Q.pop();

        if (pp.second != dist[pp.first])
            continue;
        int x = pp.first;
        for (auto &neighbor : adj[x])
            if (dist[neighbor.first] > dist[x] + neighbor.second) {
                dist[neighbor.first] = dist[x] + neighbor.second;
                Q.push(make_pair(neighbor.first, dist[neighbor.first]));
            }
    }

    return dist;
}

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

    int n, m, x, y, c;
    fin >> n >> m;

    vector<pair<int, int>> adj[n + 1];
    while (m--) {
        fin >> x >> y >> c;
        adj[x].emplace_back(make_pair(y, c));
    }

    vector<int> dist = dijkstra(n, adj);
    for (int i = 2; i < dist.size(); i++)
        fout << (dist[i] == INT_MAX ? 0 : dist[i]) << " ";
    return 0;
}