Cod sursa(job #3165787)

Utilizator catalinmarincatalinmarin catalinmarin Data 6 noiembrie 2023 22:05:18
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int inf = 1e9;
typedef pair<int, int> vecin;
int graf[50001];
int distante[50001];
vector<vecin> vecini[50001];
void dijkstra(){
    priority_queue<vecin, vector<vecin>, greater<vecin>> pq;
    distante[1] = 0;
    pq.push({0, 1});
    while (!pq.empty()){
        int nod_curent = pq.top().second;
        int cost = pq.top().first;
        pq.pop();
        for (int i = 0; i < vecini[nod_curent].size(); i++){
            int vecin_curent = vecini[nod_curent][i].second;
            if (distante[vecin_curent] > distante[nod_curent] + vecini[nod_curent][i].first){
                distante[vecin_curent] = distante[nod_curent] + vecini[nod_curent][i].first;
                pq.push(make_pair(distante[vecin_curent], vecin_curent));
            }
        }
    }
}
int main(){
    int noduri, arce;
    cin >> noduri >> arce;
    for (int i = 1; i <= noduri; i++){
        distante[i] = inf;
    }
    for (int i = 1; i <= arce; i++){
        int sursa, destinatie, cost;
        cin >> sursa >> destinatie >> cost;
        vecini[sursa].push_back(make_pair(cost, destinatie));
    }
    dijkstra();
    for (int i = 2; i <= noduri; i++){
        if (distante[i] == inf)
            cout << 0 << " ";
        else
            cout << distante[i] << " ";
    }
    return 0;
}