Cod sursa(job #2928816)

Utilizator x3medima17Dima Savva x3medima17 Data 23 octombrie 2022 22:18:12
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <vector>
#include <fstream>
#include <queue>
#include <iostream>
#include <limits>
#include <map>

using namespace std;

vector<vector<pair<int,int>>> V; // V[from] = [to, dist]

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

    int N,M;
    fin>>N>>M;
    V.resize(N);
    for(int i=0;i<M;i++) {
        int from, to, dist;
        fin>>from>>to>>dist;
        from--;
        to--;
        V[from].push_back({to, dist});
    }

    vector<int> D(N, numeric_limits<int>::max());
    D[0] = 0;
    map<int, int> Q; // <dist, node>
    Q.emplace(0, 0);
    while(!Q.empty()) {
        auto curr = Q.begin()->second;
        Q.erase(Q.begin());
        for(auto& item : V[curr]) {
            auto to = item.first;
            auto dist = item.second;
            if (D[curr] + dist < D[to]) {
                D[to] = D[curr] + dist;
                Q.emplace(D[to], to);
            }
        }
    }
    for(int i=1; i<N; i++) {
        if(D[i] == numeric_limits<int>::max()) {
            D[i] = 0;
        }
        fout<<D[i]<<' ';
    }



}