Cod sursa(job #3355517)

Utilizator CalinHanguCalinHangu CalinHangu Data 22 mai 2026 23:14:19
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.64 kb
#include <iostream>
#include <vector>
#include <queue>

using namespace std;

const int NMAX = 1e5 + 5; // 10 ^ 5 + 5
const int INF = 1e9 + 7;

vector<pair<int, int>> g[NMAX];
int dist[NMAX];

void dijkstra(int source, int size) {
    for(int i =  1; i <= size; ++i) {
        dist[i] = INF;
    }

    priority_queue<pair<int, int>> q;
    dist[source] = 0;
    q.push({0, source}); // punem prima distanta ca sa sortam dupa distanta

    while(!q.empty()) {
        int curNode = q.top().second;
        int curWeight = -q.top().first; // aici scoate din coada(ele erau adaugate negativ)
        q.pop();

        for(auto neigh: g[curNode]) {
            // ne aflam in graf
            // in graf x.first este nodul vecin
            // iar x.second este costul muchiei de la x la nodul vecin
            if(dist[neigh.first] > dist[curNode] + neigh.second) {
                dist[neigh.first] = dist[curNode] + neigh.second;
                q.push({-dist[neigh.first], neigh.first});
            }
        }

    }
}

int main() {
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);

    int n, m;
    cin >> n >> m;

    for(int i = 1; i <= m; ++i){
        int u, v, w;
        cin >> u >> v >> w; // muchie (u,v) cu costul w
        g[u].push_back({v, w}); // ==> muchie de la u la v cu costul w
        g[v].push_back({u, w}); // ==> muchie de la v la u cu costul w
    }

    dijkstra(1, n);

    for(int i = 2; i <= n; ++i) {
        if(dist[i] == INF) {
            cout << 0 << ' ';
        } else {
            cout << dist[i] << ' ';
        }
    }
    return 0;
}