Cod sursa(job #3228239)

Utilizator BucsMateMate Bucs BucsMate Data 7 mai 2024 01:44:54
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

const int INFINITY = (1 << 30) - 1;



int main()
{
    ifstream input("dijkstra.in");
    ofstream output("dijkstra.out");
    int N, M;
    input >> N >> M;
    vector<vector<pair<int, int>>> adj(N+1);
    vector<int> dist(N+1, INFINITY);
    for(int i = 0; i < M; i++){
        int x, y, z;
        input >> x >> y >> z;
        adj[x].push_back({y, z});
    }
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> p_q;
    p_q.push({0, 1});
    dist[1] = 0;
    while(!p_q.empty()){
        pair<int, int> curr_dist;
        curr_dist = p_q.top();
        p_q.pop();
        if(curr_dist.first == dist[curr_dist.second]){
            for(int i = 0; i < adj[curr_dist.second].size(); i++){
                if(dist[adj[curr_dist.second][i].first] > dist[curr_dist.second] + adj[curr_dist.second][i].second){
                    dist[adj[curr_dist.second][i].first] = dist[curr_dist.second] + adj[curr_dist.second][i].second;
                }
                p_q.push({dist[adj[curr_dist.second][i].first], adj[curr_dist.second][i].first});
            }
        }

    }
    for(int i = 2; i <= N; i++){
        if(dist[i] == INFINITY){
            output << "0 ";
        }
        else{
            output << dist[i] << " ";
        }
    }
    output << endl;
    return 0;
}