Cod sursa(job #2784744)

Utilizator RobertAcAcatrinei Robert-Marian RobertAc Data 17 octombrie 2021 10:39:21
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>
#define nmax 50005
#define f first
#define s second
#define inf INT_MAX
using namespace std;
string prob="dijkstra";
ifstream in(prob+".in");
ofstream out(prob+".out");
int dist[nmax];
vector<pair<int,int>> v[nmax];
void dijk(){
    for(int i=2;i<nmax;i++)dist[i]=inf;
    set<pair<int,int>> s;
    s.insert({0,1});
    while(!s.empty()){
        int nod=s.begin()->s;
        s.erase(s.begin());
        for(auto i:v[nod]){
            if(dist[i.f]>dist[nod]+i.s){
                if(dist[i.f]!=inf){
                    s.erase(s.find({dist[i.f],i.f}));
                }
                dist[i.f]=dist[nod]+i.s;
                s.insert({dist[i.f],i.f});
            }
        }
    }
}
int main(){
    int n,m;
    in>>n>>m;
    int x,y,z;
    while(m--){
        in>>x>>y>>z;
        v[x].push_back({y,z});
    }
    dijk();
    for(int i=2;i<=n;i++){
        if(dist[i]==inf)dist[i]=0;
        out<<dist[i]<<' ';
    }
}