Cod sursa(job #3323450)

Utilizator G223giulia G223 Data 18 noiembrie 2025 12:56:19
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

const int NMAX = 50005;
const int INF = 2000000000;

int N, M;
vector<pair<int, int>> G[NMAX];
int dist[NMAX];

void dijkstra(int start) {
    for(int i = 1; i <= N; i++) dist[i] = INF;
    dist[start] = 0;

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

    while(!pq.empty()) {
        int cost = pq.top().first;
        int node = pq.top().second;
        pq.pop();

        if(cost > dist[node]) continue;

        for(auto& edge : G[node]) {
            int nextNode = edge.first;
            int edgeCost = edge.second;

            if(dist[node] + edgeCost < dist[nextNode]) {
                dist[nextNode] = dist[node] + edgeCost;
                pq.push({dist[nextNode], nextNode});
            }
        }
    }
}

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

    scanf("%d %d", &N, &M);

    int u, v, w;
    for(int i = 0; i < M; i++) {
        scanf("%d %d %d", &u, &v, &w);
        G[u].push_back({v, w});
    }

    dijkstra(1);

    for(int i = 2; i <= N; i++) {
        if(dist[i] == INF) printf("0 ");
        else printf("%d ", dist[i]);
    }

    return 0;
}