Cod sursa(job #3249151)

Utilizator uncle_sam_007ioan bulik uncle_sam_007 Data 14 octombrie 2024 22:50:25
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

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

const int NMAX = 50005;
const int INF = 2e9;

int n;
vector <pair<int, int>> g[NMAX];
vector <int> d, p;

void dijkstra(int s){
    d.assign(n+1, INF);
    p.assign(n+1, -1);
    d[s]=0;
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
    q.push({0,s});
    while(!q.empty()){
        int node = q.top().second;
        int dist_node = q.top().first;
        q.pop();
        if(dist_node != d[node])
            continue;
        for(auto edge:g[node]){
            int to = edge.first;
            int len = edge.second;
            if(d[node] + len < d[to]){
                d[to] = d[node] + len;
                p[to] = node;
                q.push({d[to], to});
            }
        }
    }
}

int main()
{
    int m,x,y,w;
    fin>>n>>m;
    for(int i=1; i<=m; ++i){
        fin>>x>>y>>w;
        g[x].push_back({y,w});
    }
    int start=1;
    dijkstra(start);
    for(int i=2; i<=n; ++i){
        fout<<d[i]<<" ";
    }
    return 0;
}