Cod sursa(job #2980184)

Utilizator NuSuntRomanIspir Alexandru NuSuntRoman Data 16 februarie 2023 11:26:29
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>

const int NMAX = 2e5 + 5, INF = 1e9;

int n, m, dist[NMAX], f[NMAX];
std :: vector < std :: pair < int, int > > G[NMAX];
std :: priority_queue < std :: pair < int, int > > heap;

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

int main() {
    fin >> n >> m;

    for (int i = 0, u, v, c; i < m; ++ i) {
        fin >> u >> v >> c;

        -- u, -- v;

        G[u].push_back({c, v});
    }

    for (int i = 0; i < n; ++ i)
        dist[i] = INF;

    dist[0] = 0;
    heap.push({-0, 0});

    while (!heap.empty()) {
        int u = heap.top().second;

        heap.pop();

        if (f[u] == false) {
            f[u] = true;

            for (int i = 0; i < G[u].size(); ++ i) {
                int cost = G[u][i].first, v = G[u][i].second;

                if (dist[v] > dist[u] + cost) {
                    dist[v] = dist[u] + cost;
                    heap.push({-dist[v], v});
                }
            }
        }
    }

    for (int i = 1; i < n; ++ i)
        if (dist[i] >= INF)
            fout << "0" << " ";
        else
            fout << dist[i] << " ";

    return 0;
}