Cod sursa(job #2282219)

Utilizator Vlad3108Tir Vlad Ioan Vlad3108 Data 13 noiembrie 2018 14:58:54
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>
using namespace std;
map<pair<int,int>,int> v;
vector<int> E[100005];
int D[100005];
struct Cmp{
    bool operator()(const int &A,const int &B){
        return D[A]>D[B];
    }
};
void Djikstra(int k){
    priority_queue<int,vector<int>,Cmp> Q;
    Q.push(k);
    D[k]=0;
    while(!Q.empty()){
        int X=Q.top();
        for(auto it : E[X])
            if(D[it]==0){
                D[it]=D[X]+v[{X,it}];
                Q.push(it);
            }
        Q.pop();
    }
}
int main(){
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    int n,m;
    scanf("%d %d",&n,&m);
    for(int i=1;i<=m;++i){
        int st,dr,len;
        scanf("%d %d %d",&st,&dr,&len);
        E[st].push_back(dr);
        E[dr].push_back(st);
        v.insert({{st,dr},len});
        v.insert({{dr,st},len});
    }
    cout<<"\n";
    Djikstra(1);
    for(int i=2;i<=n;++i)
        printf("%d ",D[i]);
    return 0;
}