Cod sursa(job #3350012)

Utilizator eric_dragosDragos Eric eric_dragos Data 4 aprilie 2026 19:03:16
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
#define INF INT_MAX
void dijkstra(int start, vector<int> &dist, vector<vector<pair<int,int>>> &adj){

    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
    dist.assign(adj.size()+1, INT_MAX);
    dist[start] = 0;
    pq.emplace(0, start);
    while(!pq.empty()){
        pair<int,int> top = pq.top();
        pq.pop();
        int d = top.first;
        int u = top.second;

        if(d > dist[u]) continue;

        for(pair<int,int> vecin : adj[u]){
            int v = vecin.first;
            int w = vecin.second;
            if(dist[v] > d + w){
                dist[v] = d+w;
                pq.emplace(dist[v],v);
            } 
        }
        
    }
}

int main(){
    int n,m;
    fin >> n >> m;
    vector<int> dist(n+1);
    vector<vector<pair<int,int>>> adj(n+1);
    for(int i = 1; i<=m; i++){
        int a,b,c;
        fin >> a >> b >> c;
        adj[a].push_back({b,c});
    }
    dijkstra(1, dist, adj);
    for(int i = 2; i<=n; i++){
        fout << dist[i] << ' ';
    }


    return 0;
}