Cod sursa(job #3162192)

Utilizator PsyDuck1914Feraru Rares-Serban PsyDuck1914 Data 28 octombrie 2023 16:01:28
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f ("dijkstra.in");
ofstream g ("dijkstra.out");

const int NMAX = 5e4;
const int MMAX = 25e4;
const int INF = 0x3f3f3f3f;

vector<pair<int, int>> graph[NMAX+1];
int rez[NMAX+1];

void dijkstra(int s){
    set<pair<int, int>> q;
    q.insert({0, s});
    rez[s] = 0;
    while(!q.empty()){
        int cost = q.begin()->first;
        int from = q.begin()->second;
        q.erase(q.begin());
        for(auto ver : graph[from]){
            if(ver.second + rez[from] < rez[ver.first]){
       
                rez[ver.first] = ver.second + rez[from];
                q.insert({rez[ver.first], ver.first});
            }
        }
    }
}

int main()
{
    fill(rez+1, rez+1+NMAX, INF);
    int n, m;
    f >> n >> m;
    for(int i=1; i<=n; i++){
        int a, b, c;
        f >> a >> b >> c;
        graph[a].push_back({b, c});
    }
    
    dijkstra(1);
    for(int i=2; i<=n; i++)
        if(rez[i] == INF)
            g << 0 << ' ';
        else g << rez[i] << ' ';
    
    return 0;
}