Cod sursa(job #3172284)

Utilizator DariusGhercaDarius Gherca DariusGherca Data 20 noiembrie 2023 14:28:34
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
#include <bitset>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const int N = 5e4 + 10;

vector <pair<int, int>> vertex[N];
///first cost second vertex

int num_vert, num_edg;
vector <int> dist(N, INT_MAX);
bitset <N> viz;

int main() {
    f >> num_vert >> num_edg;
    for(int i = 1; i <= num_edg; i++){
        int x, y, z;
        f >> x >> y >> z;
        vertex[x].push_back({z, y});
    }
    priority_queue <pair<int, int>> pq; /// first cost second vertex
    dist[1] = 0;
    pq.push({0, 1});
    while(!pq.empty()){
        int vert = pq.top().second, act_cost = -pq.top().first;
        pq.pop();
        if(viz[vert])
            continue;
        viz[vert] = 1;
        for(auto edge: vertex[vert]){
            if(act_cost + edge.first < dist[edge.second] && !viz[edge.second]){
                dist[edge.second] = act_cost + edge.first;
                pq.push({-dist[edge.second], edge.second});
            }
        }
    }
    for(int i = 2; i <= num_vert; i++){
        if(dist[i] == INT_MAX)
            dist[i] = 0;
        g << dist[i] << " ";
    }
    return 0;
}