Cod sursa(job #3277424)

Utilizator Roman70Maruseac Roman Roman70 Data 16 februarie 2025 00:04:48
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <bits/stdc++.h>
using namespace std;

const int INF = 1e9;
const int MAXN = 50000;
vector<vector<pair<int, int>>> adj(MAXN);
int d[MAXN];

struct cmp {
    bool operator()(int a, int b) {
        return d[a] > d[b];
    }
};

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

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

    int n, m;
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        d[i] = INF;
    }
    for (int i = 0; i < m; i++) {
        int a, b, w;
        cin >> a >> b >> w;
        a--; b--; // converting to 0-indexed
        adj[a].push_back({b, w});
    }
    
    priority_queue<int, vector<int>, cmp> q;
    d[0] = 0;
    q.push(0);
    
    while (!q.empty()) {
        int nod = q.top();
        q.pop();

        // Optional: skip if this entry is outdated.
        // if (d[nod] != current_distance) continue; 

        for (auto edge : adj[nod]) {
            int vecin = edge.first;
            int weight = edge.second;
            if (d[nod] + weight < d[vecin]) {
                d[vecin] = d[nod] + weight;
                q.push(vecin);
            }
        }
    }
    
    for (int i = 1; i < n; i++) {
        if(d[i] == 1e9) cout << 0;
        else cout << d[i];
        cout<<" ";
    }
    
    return 0;
}