Cod sursa(job #2755413)

Utilizator Mihai_BarbuMihai Barbu Mihai_Barbu Data 27 mai 2021 10:25:35
Problema Algoritmul lui Dijkstra Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>

using namespace std;

#define pii pair<int, int>
const int NMAX = 5 * 1e4 + 5;

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

vector<pii> adj[NMAX];
int vis[NMAX];
int d[NMAX];

void dijkstra(int src, int d[]) {
    set<pii> pq;
    int y, w;

    d[src] = 0;

    for (auto& p : adj[src]) {
        y = p.first;
        w = p.second;

        d[y] = w;

        pq.insert({w, y});
    }

    while (!pq.empty()) {
        auto it = pq.begin();

        int x = (*it).second;

        pq.erase(it);

        for (auto& p :  adj[x]) {
            y = p.first;
            w = p.second;

            if (vis[y] == 0 || (d[y] > d[x] + w)) {
                pq.erase({d[y], y});

                d[y] = d[x] + w;
                vis[y] = 1;

                pq.insert({d[y], y});
            }
        }
    }
}

int main() {
    int N, M;
    int i, x, y, w;

    fin >> N >> M;

    for (i = 1; i <= M; ++i) {
        fin >> x >> y >> w;

        adj[x].push_back({y, w});
    }

    dijkstra(1, d);

    for (x = 2; x <= N; ++x) {
        fout << d[x] << " ";
    }
    fout << "\n";

    return 0;
}