Cod sursa(job #2784334)

Utilizator AlexTacuTacu Alexandru AlexTacu Data 16 octombrie 2021 12:43:15
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <bits/stdc++.h>

#define NMAX 50005
#define INF 5000000005

using namespace std;

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

int n,m;
int Dist[NMAX];
int Viz[NMAX];

vector < pair < int , int > > v[NMAX];

priority_queue < int , vector < int > > q;

void cit()
{
    in>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y,c;
        in>>x>>y>>c;
        v[x].push_back({y,c});
    }
}

void Dijkstra()
{
    while(!q.empty())
    {
        int nod=q.top();
        q.pop();
        Viz[nod]=0;
        for(const auto& vecin : v[nod])
        {
            if((-Dist[vecin.first])>(-Dist[nod])+vecin.second)
            {
                Dist[vecin.first]=-((-Dist[nod])+vecin.second);
                if(!Viz[vecin.first])
                {
                    q.push(vecin.first);
                    Viz[vecin.first]=1;
                }
            }
        }
    }
}

void prg()
{
    for(int i=1;i<=n;i++)
        Dist[i]=-INF;
    Dist[1]=0;
    Viz[1]=1;
    q.push(1);
    Dijkstra();
}

void afis()
{
    for(int i=2;i<=n;i++)
        if(Dist[i]==-INF)
            out<<0<<' ';
        else
            out<<-Dist[i]<<' ';
}

int main()
{
    cit();
    prg();
    afis();
    return 0;
}