Cod sursa(job #3324552)

Utilizator CRISTI.STGMarius-Cristian Stiegelbauer CRISTI.STG Data 22 noiembrie 2025 14:20:21
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
// https://www.infoarena.ro/job_detail/2351519?action=view-source
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> Q;

const int NMax=50000;
const int oo=1e9;
vector< pair<int,int> > G[NMax+5];
int N,M;
int D[NMax+5];
int Use[NMax+5];

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

int FindMin(){
    while(Use[Q.top().second])
        Q.pop();
    int res = Q.top().second;
    Q.pop();
    return res;
}

void Dijkstra(){
    for(int i=2;i<=N;i++){
        D[i]=oo;
    }
    for(int i = 1; i <= N; i++){
        Q.push(make_pair(D[i], i));
    }
    for(int i=1;i<=N;i++){
        int Nod;
        Nod=FindMin();
        Use[Nod]=true;
        for(auto i:G[Nod]){
            int Vecin=i.first, Cost=i.second;
            if(D[Nod]+Cost<D[Vecin]){
                D[Vecin]=D[Nod]+Cost;
                Q.push(make_pair(D[Vecin],Vecin));
            }

        }
    }
}

void Print(){
    for(int i=2;i<=N;i++){
        if(D[i]==oo){
            D[i]=0;
        }
        fout << D[i] << " ";
    }
    fout << endl;
}

int main()
{
    Read();
    Dijkstra();
    Print();
}