Cod sursa(job #2310030)

Utilizator q1e123Solca Robert-Nicolae q1e123 Data 30 decembrie 2018 14:42:33
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include<bits/stdc++.h>

using namespace std;

#define pb push_back
#define ft first
#define sc second
#define mp make_pair

typedef pair<int,int> iPair;
const int N_MAX = 50001;
const int INF = 0x3f3f3f3;

int n;
long m;
bitset<N_MAX> viz;

vector< pair<int,int> >graph[N_MAX];
void read(){
    scanf("%d %ld",&n,&m);
    for(long i=0;i<m;++i){
        int start,end,cost;
        scanf("%d %d %d",&start,&end,&cost);
        graph[start].pb(mp(end,cost) );
    }
}

void dijkstra(int src){
    priority_queue<iPair, vector<iPair>,greater<iPair> > minHeap;
    vector<int>dist(n+1,INF);
    minHeap.push(mp(0,src));
    dist[src]=0;

    while(!minHeap.empty()){
        int u=minHeap.top().sc;
        minHeap.pop();
        viz[u]=true;
        for(auto i:graph[u]){
            int v=i.ft;
            int cost = i.sc;
            if(viz[v]==0 && dist[v]>dist[u]+cost){
                dist[v]=dist[u]+cost;
                minHeap.push(mp(dist[v],v));
            }
        }
    }
    
    for(int i=2;i<=n;++i){
        if(dist[i]!=0 ){
            if(dist[i]==INF) printf("%d ",0);
            else printf("%d ",dist[i]);                
         }
    }
}

int main(){
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    
    read();
    dijkstra(1);
    return 0;                
}