Cod sursa(job #3323479)

Utilizator ioanyaioana cocut ioanya Data 18 noiembrie 2025 13:13:51
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <queue>
#include <climits>
#include <vector>

using namespace std;

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

const int inf = 2000000000;

int main(){
    int n, m;
    fin >> n >> m;

    vector<vector<pair<int, int>>> graf(n+1);
    for(int i=0; i<m; i++) {
        int x, y, z;
        fin >> x >> y >> z;
        graf[x].push_back({y, z});
    }

    vector<int> dist(n+1, inf);
    dist[1] = 0;


    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(unsigned int i=0; i<graf[node].size(); i++) {
            int v = graf[node][i].first;
            int c = graf[node][i].second;

            if (dist[node] + c < dist[v]) {
                dist[v] = dist[node] + c;

                pq.push({dist[v], v});
            }
        }
    }

    for(int i=2; i<=n; i++) {
        if (dist[i] == inf) {
            fout << "0";
        } else {
            fout << dist[i];
        }

        if (i<n) {
            fout << " ";
        }
    }
    fout << endl;
    return 0;
}