Cod sursa(job #3209902)

Utilizator Sabin1133Padurariu Sabin Sabin1133 Data 3 martie 2024 19:57:07
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>

#define NMAX 50000

class comp_edge {
public:
    bool operator()(std::pair<int, int> &e1, std::pair<int, int> &e2)
    {
        return e1.second < e2.second;
    }
};

int n, m;
int d[NMAX], vis[NMAX];
std::vector<std::pair<int, int>> g[NMAX];
std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int>>, comp_edge> pq;

int main()
{
    std::fstream fin("dijkstra.in");
    std::ofstream fout("dijkstra.out");

    fin >> n >> m;

    for (int node, neigh, w, i = 0; i < m; ++i) {
        fin >> node >> neigh >> w;

        g[node].push_back({neigh, w});
    }

    for (int i = 1; i <= n; ++i)
        d[i] = INT32_MAX;

    d[1] = 0;
    pq.push({1, 0});

    while (!pq.empty()) {
        auto [node, old_dist] = pq.top();
        pq.pop();

        if (d[node] < old_dist)
            continue;

        vis[node] = 1;

        for (auto [neigh, weight] : g[node]) {
            if (d[neigh] > d[node] + weight) {
                d[neigh] = d[node] + weight;
                pq.push({neigh, d[neigh]});
            }
        }
    }

    for (int i = 2; i <= n; ++i)
        fout << (d[i] != INT32_MAX) * d[i] << ' ';
    fout << '\n';

    fin.close();
    fout.close();

    return 0;
}