Cod sursa(job #3360137)

Utilizator livliviLivia Magureanu livlivi Data 9 iulie 2026 12:51:29
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

vector<int> dijkstra(int src, vector<vector<pair<int, int>>>& edges) {
    vector<int> dist(edges.size(), -1);
    priority_queue<pair<int, int>, vector<pair<int, int>>, 
            greater<pair<int, int>>> pq;

    dist[src] = 0;
    pq.push({0, src});

    while (!pq.empty()) {
        auto [cost, node] = pq.top();
        pq.pop();
        if (cost != dist[node]) { continue; }

        for (auto& [nxt, cost_nxt] : edges[node]) {
            if (dist[nxt] == -1 || dist[nxt] > cost + cost_nxt) {
                dist[nxt] = cost + cost_nxt;
                pq.push({dist[nxt], nxt});
            }
        }
    }

    return dist;
}

int main() {
    ifstream cin("dijkstra.in");
    ofstream cout("dijkstra.out");

    int n, m; cin >> n >> m;
    vector<vector<pair<int, int>>> edges(n);
    for (int i = 0; i < m; i++) {
        int a, b, c; cin >> a >> b >> c;
        a--; b--;
        edges[a].push_back({b, c});
    }

    vector<int> dist = dijkstra(0, edges);

    for (int i = 1; i < n; i++) {
        cout << (dist[i] == -1 ? 0 : dist[i]) << " ";
    }
    cout << "\n";

    return 0;
}