Cod sursa(job #3306400)

Utilizator alesiodemiriAlesio Demiri alesiodemiri Data 10 august 2025 12:28:02
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.57 kb
#include <iostream>
#include <vector>
#include <queue>
#include <utility> // for pair
#include <limits>

using namespace std;

#define ll long long
#define NMAX 50100
const int INF = 0x3f3f3f3f;

int numNodes, numEdges;
vector<pair<int,int>> adj[NMAX]; // adjacency list: node -> vector of (neighbor, cost)
int dist[NMAX];

void ReadData() {
    cin >> numNodes >> numEdges;
    for (int i = 0; i < numEdges; i++) {
        int u, v, w;
        cin >> u >> v >> w;
        adj[u].push_back({v, w});
        // If undirected, also add adj[v].push_back({u, w});
    }
}

void Solve() {
    for (int i = 1; i <= numNodes; i++)
        dist[i] = INF;
    
    dist[1] = 0;

    // Min-heap priority queue: (distance, node)
    priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;
    pq.push({0, 1});

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

        if (d > dist[node])
            continue;

        for (auto &edge : adj[node]) {
            int nxt = edge.first;
            int w = edge.second;
            if (dist[node] + w < dist[nxt]) {
                dist[nxt] = dist[node] + w;
                pq.push({dist[nxt], nxt});
            }
        }
    }

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

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

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

    ReadData();
    Solve();

    return 0;
}