Cod sursa(job #2203960)

Utilizator gbibBacotiu Gabi gbib Data 13 mai 2018 21:20:44
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
int n,m;
vector <pair<int,int> > v[50005];
int cost[50005];
priority_queue <pair<int,int> ,vector<pair<int,int> >,greater<pair<int,int> > > H;

void djikstra(int nod) {
    int nou,c,pana_aici;
    H.push(make_pair(0,nod));
    cost[nod]=0;
    while(H.size()) {
        nod = H.top().second;
        pana_aici=H.top().first;
        H.pop();
        if(pana_aici>cost[nod])
            continue;
        for(auto vecin:v[nod]) {
            nou=vecin.first;
            c=vecin.second;
            if(cost[nou]>c+cost[nod]) {
                cost[nou]=c+cost[nod];
                H.push(make_pair(cost[nou],nou));
            }
        }
    }
}

int main()
{
    int i,x,y,c;
    in>>n>>m;
    for(i=1;i<=n;i++) {
        cost[i]=(1<<30);
    }
    for(int i=1;i<=m;i++) {
        in>>x>>y>>c;
        v[x].push_back(make_pair(y,c));
    }
    djikstra(1);
    for(i=2;i<=n;i++) {
        out<<cost[i]<<" ";
    }
    return 0;
}