Cod sursa(job #2575257)

Utilizator rd211Dinucu David rd211 Data 6 martie 2020 12:28:26
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <bits/stdc++.h>

using namespace std;
const int NMAX = 50005;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
vector<pair<int, int>> graf[NMAX];
int n, m;
int dist[NMAX];
bool inCue[NMAX];
struct comp
{
    bool operator()(int a, int b)
    {
        return dist[a]>dist[b];
    }
};
void dij(int node)
{
    priority_queue<int, vector<int>, comp> cue;
    fill(dist,dist+NMAX,INT_MAX);
    dist[node] = 0;
    cue.push(node);
    inCue[node]=1;
    while(cue.size())
    {
        int top = cue.top();
        cue.pop();
        inCue[top]=false;
        for(auto i:graf[top])
        {
            if(dist[i.first]>dist[top]+i.second)
            {
                dist[i.first] = dist[top]+i.second;
                if(!inCue[i.first])
                    cue.push(i.first),inCue[i.first]=1;
            }
        }
    }
}
int main()
{
    fin>>n>>m;
    while(m--)
    {
        int a, b, c;
        fin>>a>>b>>c;
        graf[a].push_back({b,c});
    }
    dij(1);
    for(int i = 2;i<=n;i++)
    {
        if(dist[i]==-1)
            fout<<0<<" ";
        else
            fout<<dist[i]<<" ";
    }
    return 0;
}