Cod sursa(job #1993213)

Utilizator acc_b_magureleAcceleratorul de blaturi Magurele acc_b_magurele Data 22 iunie 2017 15:59:59
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>

using namespace std;

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

const int N_MAX = 50000+5, INF = INT_MAX/10;

int n, m;
vector<pair<int,int> > vec[N_MAX];

priority_queue<pair<int,int>, vector<pair<int,int> >, greater<pair<int,int> > > q;
bitset<N_MAX> inq;
int cost[N_MAX];

void dijkstra(){

    for(int i = 2; i<=n; ++i)
        cost[i] = INF;

    cost[1] = 0;

    for(q.push({0,1}); !q.empty(); q.pop()){
        int nod = q.top().second;
        inq[nod] = false;
        for(auto j : vec[nod])
            if(!inq[j.first] && cost[nod] + j.second < cost[j.first]){
                cost[j.first] = cost[nod] + j.second;
                q.push({cost[j.first], j.first});
                inq[j.first] = true;
            }
    }
}

int main()
{
    fin >> n >> m;

    for(int i = 1 , a, b, c; i<=m; ++i){
        fin >> a >> b >> c;
        vec[a].push_back({b,c});
    }

    dijkstra();

    for(int i = 2; i<=n; ++i, fout << " ")
        if(cost[i] != INF)
            fout << cost[i];
        else fout << 0;
    return 0;
}