Cod sursa(job #1550665)

Utilizator DobosDobos Paul Dobos Data 14 decembrie 2015 14:43:16
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int NMAX = 50005;
const int INF = 1e9;
vector < pair <int,int> > G[NMAX];
vector < int > T;
int D[NMAX],n;
bool cmp(const int &a,const int &b){
    return(D[a] > D[b]);
}
inline void dijkstra(){
    int nod;
    T.push_back(1);
    make_heap(T.begin(),T.end(),cmp);
    for(int i = 2; i <= n; i++)
        D[i] = INF;
    while(!T.empty()){
        nod = T.front();
        pop_heap(T.begin(),T.end(),cmp);
        T.pop_back();
        for(int i = 0; i < G[nod].size();i++){
            if(D[G[nod][i].second] > G[nod][i].first + D[nod]){
                D[G[nod][i].second] = G[nod][i].first + D[nod];
                T.push_back(G[nod][i].second);
                push_heap(T.begin(),T.end(),cmp);
            }
        }
    }
}
int main()
{
    int m,x,y,c;
    fin >> n >> m;
    for(int j = 1; j <= m; j++){
        fin >> x >> y >> c;
        G[x].push_back({c,y});
        G[y].push_back({c,x});
    }
        dijkstra();
        for(int i = 2; i <= n;i++)
            fout << D[i] << " ";
    return 0;
}