Cod sursa(job #2970208)

Utilizator GeorgeNistorNistor Gheorghe GeorgeNistor Data 24 ianuarie 2023 16:22:19
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
/*
 * https://www.infoarena.ro/problema/dijkstra
 * O (V+E*logV) .
 */
#include <bits/stdc++.h>

using namespace std;

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

int V, E, s;
vector<vector<pair<int, int>>> adjList;
void init(){
    s = 1;
    adjList.resize(V+1);
}

void read(){
    in >> V >> E;
    init();
    for(int i = 0; i < E; i++){
        int u, v, w;
        in >> u >> v >> w;
        adjList[u].emplace_back(v, w);
    }
    in.close();
}

void dijkstra(){
    vector<int> d(V+1, INT_MAX), parent(V+1);
    d[s] = parent[s] = 0;
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> heap;
    heap.push({d[s], s});
    while(!heap.empty()){
        int u = heap.top().second;
        heap.pop();
        for(const auto & edge : adjList[u]){
            int v = edge.first;
            int w = edge.second;
            if(d[u] + w < d[v]){
                d[v] = d[u] + w;
                parent[v] = u;
                heap.push({d[v], v});
            }
        }
    }
    for(int i = 1; i <= V; i++){
        if(i == s)
            continue;
        else
            if(d[i] == INT_MAX)
                out << 0 << ' ';
            else
                out << d[i] << ' ';
    }
    out.close();
}

int main() {
    read();
    dijkstra();
    return 0;
}