Cod sursa(job #2280427)

Utilizator coto2464andrei cotofrei coto2464 Data 10 noiembrie 2018 16:20:50
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <vector>
#include <queue>
#include <functional>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int maxx=2147483647;
vector< pair <int,int> >v[50000];
int d[50000];

void dijkstra(){
    priority_queue< pair <int,int> , vector < pair<int,int> >,greater <pair<int,int> > >x;
    x.push({0,1});
    while(!x.empty()){
        int a=x.top().first;
        int b=x.top().second;
        x.pop();
        if(d[b]!=a) continue;
        for(auto const &i: v[b]){
            if(a+i.second<d[i.first]){
                d[i.first] = a + i.second;
                x.push({d[i.first], i.first});
            }
        }

    }
}

int main()
{
    int n,m,i;
    f>>n>>m;
    for(i=1;i<=n;i++){
        int a,b,cost;
        f>>a>>b>>cost;
        v[a].push_back(make_pair(b,cost));
    }
    for(i=2;i<=n;i++)
        d[i]=maxx;
    dijkstra();
    for(i=2;i<=n;i++)
    {
        if(d[i]==maxx)
            g<<"0 ";
        else
            g<<d[i]<<" ";
    }
    return 0;
}