Cod sursa(job #3214238)

Utilizator PescarusTanislav Luca Andrei Pescarus Data 13 martie 2024 22:08:23
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <queue>
#include <vector>

using namespace std;
const int nmax = 50005;
vector<pair<int, int>> l[nmax];
int sol[nmax];

void solve(){
    priority_queue<pair<int, int>> q;
    q.push({0, 1});
    while(!q.empty()){
        int node = q.top().second, dist = -q.top().first;
        q.pop();
        if(dist > sol[node]){
            continue;
        }
        for(auto x : l[node]){
            if(sol[x.first] == 0 || sol[x.first] > sol[node] + x.second){
                sol[x.first] = sol[node] + x.second;
                q.push({-sol[x.first], x.first});
            }
        }
    }
}
int main(){
    ifstream f("dijkstra.in");
    ofstream g("dijkstra.out");
    int n, m;
    f >> n >> m;
    for(int i = 1; i <= m; i++){
        int x, y, z;
        f >> x >> y >> z;
        l[x].push_back({y, z});
    }
    sol[1] = 0;
    solve();
    for(int i = 2; i <= n; i++){
        g << sol[i] << ' ';
    }
}