Cod sursa(job #1489592)

Utilizator roadtojediWilly Fog roadtojedi Data 21 septembrie 2015 18:14:40
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <queue>
#include <vector>
#include <climits>
#include <cstdio>
using namespace std;

#define pi pair<int,int>
const int NMax = 50002;
vector< pi > G[NMax];
int n,m;
int uz[NMax] , d[NMax];

void dijkstra(int x){
    int i;
    priority_queue< pi , vector < pi > , greater< pi > > Heap;
    for(i = 2; i <= n; i++)
        d[i] = INT_MAX;
    d[1] = 0;
    Heap.push({0,1});
    while(!Heap.empty()){
        int from = Heap.top().second;
        Heap.pop();
        if(uz[from]) continue;
        uz[from] = 1;
        for(auto it : G[from]){
            if(d[it.first] > d[from] + it.second ){
                d[it.first] = d[from] + it.second;
                Heap.push({d[it.first],it.first});
            }
        }
    }
}


int main(){
    int i;
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    cin>>n>>m;
    int x,y,c;
    for(i = 1; i <= m; i++){
        cin>>x>>y>>c;
        G[x].push_back({y,c});
        G[y].push_back({x,c});
    }
    dijkstra(1);
    for(i = 2; i <= n; i++){
        if(d[i] == INT_MAX)
            cout<<"0 ";
        else
            cout<<d[i]<<" ";
    }
}