Cod sursa(job #2918847)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 13 august 2022 15:00:31
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <bits/stdc++.h>
#pragma GCC optimize ("Ofast")

using namespace std;

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

const int INF = 2e9;
const int MAX_N = 50005;
int n, m, a, b, c;
int dist[MAX_N];
vector <pair<int, int>> e[MAX_N];

int crt, nxt, cst;
set<pair<int, int>> best;
bitset <MAX_N> viz;
void dijkstra(int start){

    dist[1] = 0;
    for(int i=2; i<=n; i++)
        dist[i] = INF;

    best.insert({dist[1], 1});
    while(!best.empty()){
        crt = best.begin()->second;
        best.erase(best.begin());

        if(!viz[crt])
            for(int i=0; i < (int)e[crt].size(); i++){
                nxt = e[crt][i].first;
                cst = e[crt][i].second;
                if(dist[nxt] > dist[crt] + cst){
                    dist[nxt] = dist[crt] + cst;
                    best.insert({dist[nxt], nxt});
                }
            }
        viz[crt] = true;
    }
}

int main (){
    ios_base::sync_with_stdio(false);
    fin.tie(nullptr), fout.tie(nullptr);

    fin>>n>>m;
    for(int i=1; i<=m; i++){
        fin>>a>>b>>c;
        e[a].push_back({b, c});
    }

    dijkstra(1);

    for(int i=2; i<=n; i++)
        if(dist[i] != INF)
            fout<<dist[i]<<" ";
        else
            fout<<"0 ";
    return 0;
}