Cod sursa(job #1964004)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 12 aprilie 2017 23:23:13
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#import<bits/stdc++.h>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const int N=50005,M=2e9;
set<pair<int,int> >q;
set<pair<int,int> >::iterator w;
vector<int>ls[N],lc[N];
int n,m,x,y,c,i,l,dist[N];
int main(){
    for(f>>n>>m;m--;){
        f>>x>>y>>c;ls[x].push_back(y);lc[x].push_back(c);}
    for (i=2;i<=n;dist[i++]=M);
    q.insert(make_pair(0,1));
    while(!q.empty()){
        l=ls[x=q.begin()->second].size();q.erase(q.begin());
        for(i=0;i<l;i++){
            y=ls[x][i],c=lc[x][i];
            if(dist[x]+c<dist[y]){
                if((w=q.find(make_pair(dist[y],y)))!=q.end())
                    q.erase(w);
                q.insert(make_pair(dist[y]=dist[x]+c,y));}}
    }
    for(i=2;i<=n;g<<((c=dist[i++])==M?0:c)<<' ');
}