Cod sursa(job #3320807)

Utilizator Dv1de29Barbu David Florian Dv1de29 Data 7 noiembrie 2025 14:43:30
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <vector>
#include <queue>
#include <limits>

using namespace std;

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

vector<vector<pair<int, int>>> ad;
int vis[100005];

void dijkstra(int start, vector<int>& dist) {
    dist[start] = 0;

    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> pq;
    pq.push({0, start});

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

        if (vis[u]) continue;
        vis[u] = 1;

        for (auto &[v, cost] : ad[u]) {
            if (dist[v] > dist[u] + cost) {
                dist[v] = dist[u] + cost;
                pq.push({dist[v], v});
            }
        }
    }
}

int main() {
    int N, M;
    fin >> N >> M;

    ad.resize(N + 1);

    for (int i = 0; i < M; i++) {
        int u, v, c;
        fin >> u >> v >> c;
        ad[u].push_back({v, c});
        ad[v].push_back({u, c});
    }

    vector<int> dist(N + 1, 1e9);
    dijkstra(1, dist);

    for (int i = 2; i <= N; i++) {
        if (dist[i] == 1e9)
            fout << "0 ";
        else
            fout << dist[i] << ' ';
    }
}