Cod sursa(job #2974117)

Utilizator SennyUrsu Arsenie Senny Data 3 februarie 2023 10:39:12
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <bits/stdc++.h>
using namespace std;
const int NMax = 50005;
const int oo = INT_MAX;

int N, M;
int D[NMax];
bool inCoada[NMax];
vector<pair <int, int>> G[NMax];

struct compara {
    bool operator()(int x, int y){
        return D[x] > D[y];
    }
};

priority_queue<int, vector<int>, compara> Coada;

void Citeste(){
    cin >> N >> M;
    for (int i = 1; i <= M; i++){
        int x, y, c;
        cin >> x >> y >> c;
        G[x].push_back(make_pair(y, c));

    }
}

void Dijkstra(int nodStart){
    for (int i = 1; i <= N; i++){
        D[i] = oo;
    }

    D[nodStart] = 0;
    Coada.push(nodStart);
    inCoada[nodStart] = true;
    while(!Coada.empty()){
        int nodCurent = Coada.top();
        Coada.pop();
        inCoada[nodCurent] = false;
        for (size_t i = 0; i < G[nodCurent].size(); i++){
            int Vecin = G[nodCurent][i].first;
            int Cost = G[nodCurent][i].second;
            if (D[nodCurent] + Cost < D[Vecin]){
                D[Vecin] = D[nodCurent] + Cost;
                if (!inCoada[Vecin]){
                    Coada.push(Vecin);
                    inCoada[Vecin] = true;
                }
            }
        }
    }
}

void Afiseaza(){
    for (int i = 2; i <= N; i++){
        if (D[i] != oo){
            cout << D[i] << " ";
        }else{
            cout << "0 ";
        }
    }
}

int main() {
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    Citeste();
    Dijkstra(1);
    Afiseaza();
    return 0;
}