Cod sursa(job #3203110)

Utilizator indianu_talpa_iuteTisca Catalin indianu_talpa_iute Data 13 februarie 2024 09:27:32
Problema Algoritmul lui Dijkstra Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
#define MAXN 50000

using namespace std;

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

int main() {
    int n, m;
    fin >> n >> m;
    vector<pair<int, int>> graph[MAXN];
    for (int i = 0; i < m; i++) {
        int from, to, dist;
        fin >> from >> to >> dist;
        from--, to--;
        graph[from].emplace_back( to, dist );
    }

    std::set<pair<int, int>, std::less<>> pq;
    pq.insert({0, 0});
    int dist[MAXN];
    for (int i = 0; i < n; i++)
        dist[i] = INT_MAX;

    while (!pq.empty()) {
        int node = pq.begin()->first;
        int currentDist = pq.begin()->second;
        pq.erase(pq.begin());

        for (auto& neighbour: graph[node]) {
            if (currentDist + neighbour.second < dist[neighbour.first]) {
                dist[neighbour.first] = currentDist + neighbour.second;
                pq.insert({ neighbour.first, dist[neighbour.first] });
            }
        }
    }

    for (int i = 1; i < n; i++)
        fout << (dist[i] == INT_MAX ? 0 : dist[i]) << ' ';
    return 0;
}