Cod sursa(job #2925979)

Utilizator RaresPoinaruPoinaru-Rares-Aurel RaresPoinaru Data 16 octombrie 2022 15:30:40
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");

const int MAXN=250010;


vector <pair <long long,long long>>g[MAXN];
long long n,m,visit[MAXN];
long long costm[MAXN];
priority_queue <pair <long long,long long>,vector <pair <long long,long long>>,greater <pair <long long,long long>>> pq;

int main()
{
    fin >>n>>m;
    for (int i=1;i<=m;++i){
        long long x,y,cost;
        fin >>x>>y>>cost;
        g[x].push_back ({cost,y});
    }
    for (int i=1;i<=n;++i)
        costm[i]=1e18;
    costm[1]=0;
    pq.push ({0,1});
    while (pq.empty ()==false){
        long long nod=pq.top ().second;
        long long costnod=pq.top ().first;
        pq.pop ();
        if (visit[nod]==1)
            continue;
        visit[nod]=1;
        costm[nod]=costnod;
        for (int i=0;i<g[nod].size ();++i){
            long long nodcrt=g[nod][i].second;
            long long costcrt=g[nod][i].first;
            if (costm[nod]+costcrt<costm[nodcrt]){
                pq.push ({costm[nod]+costcrt,nodcrt});
                costm[nodcrt]=costm[nod]+costcrt;
            }

        }

    }
    for (int i=2;i<=n;++i){
        if (visit[i]==0)
            fout <<0<<' ';
        else
            fout <<costm[i]<<' ';
    }
    fin.close ();
    fout.close ();
    return 0;
}