Cod sursa(job #2925981)

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

const int MAXM=250010;
const int MAXN=50010;

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

int main()
{
    fin >>n>>m;
    for (int i=1;i<=m;++i){
        int 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){
        int nod=pq.top ().second;
        int 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){
            int nodcrt=g[nod][i].second;
            int 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;
}