Cod sursa(job #2672864)

Utilizator ilucianIlea Lucian ilucian Data 15 noiembrie 2020 10:16:20
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <queue>
#include <vector>
#define INF 1000000000
using namespace std;
ifstream fi("dijkstra.in");
ofstream fo("dijkstra.out");
int N,M;
priority_queue < pair <int,int> > H;
int D[50001];
vector < pair <int, int> > ADJ[50001];
int main()
{
    fi>>N>>M;
    for (int i=1;i<=M;i++)
    {
        int a,b,c;
        fi>>a>>b>>c;
        ADJ[a].push_back({b,c});
    }
    D[1]=0;
    for (int i=2;i<=N;i++)
        D[i]=INF;
    H.push({-D[1],1});
    for (int i=1;i<=N;i++)
    {
        pair <int,int> p;
        p=H.top();
        H.pop();
        int v,cost;
        v=p.second;
        cost=-p.first;
        for (auto it:ADJ[v])
        {
            int w;
            w=it.first;
            int z;
            z=it.second;
            if (z+cost<D[w])
            {
                D[w]=z+cost;
                H.push({-D[w],w});
            }
        }
    }
    for (int i=2;i<=N;i++)
        fo<<D[i]<<" ";
    fi.close();
    fo.close();
    return 0;
}