Cod sursa(job #2736892)

Utilizator AndreiD31Dragan Andrei AndreiD31 Data 4 aprilie 2021 09:52:52
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,dist[50100];
priority_queue < pair < int , int > , vector < pair < int , int > > , greater < pair < int , int > > > h;
vector < pair < int , int > > v[50100];

void Dijkstra()
{
    int i;
    for(i=1;i<=n;i++)dist[i]=INT_MAX/2;
    dist[1]=0;
    h.push({0,1});

    while(!h.empty())
    {
        int nod=h.top().second;
        int dst=h.top().first;
        h.pop();

        if(dist[nod]<dst)continue;

        for(i=0;i<v[nod].size();i++)
        {
            int vecin=v[nod][i].first;
            int dist_intre=v[nod][i].second;
            if(dist[vecin]>dist[nod]+dist_intre)
            {
                dist[vecin]=dist[nod]+dist_intre;
                h.push({dist[vecin],vecin});
            }
        }
    }
}

int m,i,x,y,dst;
int main()
{
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>x>>y>>dst;
        v[x].push_back({y,dst});
    }
    Dijkstra();
    for(i=2;i<=n;i++)
        if(dist[i]==INT_MAX/2)g<<0<<" ";
        else g<<dist[i]<<" ";
    return 0;
}