Cod sursa(job #1843979)

Utilizator lauratalaatlaura talaat lauratalaat Data 9 ianuarie 2017 16:52:25
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include<stdio.h>
#include<queue>
#include<utility>
#include<vector>
using namespace std;
priority_queue< pair<int, int>, vector<pair<int, int> >, greater < pair <int, int > > > heap;
int dist[50001];
vector<pair<int,int> >v[250001];
int n;
void dijkstra ( int nod ){
    int d,to,i,from,edge,pp;
    heap.push(make_pair(0,1));
    for(i=1;i<=n;i++)
        dist[i]=999999999;
    dist[nod]=0;
    while(!heap.empty()){
        pp=1;
        from=heap.top().second;
        d=heap.top().first;
        heap.pop();
        if(dist[from]!=d){
            //continue;
            pp=0;
        }
        for(i=0;i<v[from].size()&&pp==1;i++){
            to=v[from][i].second;
            edge=v[from][i].first;
            if(dist[to]>d+edge){
                dist[to]=d+edge;
                heap.push(make_pair(d+edge,to));
            }
        }
    }
}
int main(){
    int i,a,b,c,m;
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;i++){
        scanf("%d%d%d",&a,&b,&c);
        v[a].push_back(make_pair(c,b));
    }
    dijkstra(1);
    for(i=2;i<=n;i++){
        if(dist[i]==999999999)
            printf("0 ");
        printf("%d ",dist[i]);
    }
    return 0;
}