Cod sursa(job #1780491)

Utilizator robertstrecheStreche Robert robertstreche Data 16 octombrie 2016 12:06:18
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>
#include <vector>
#include <queue>

#define NMAX 50001
#define INF 250000000
#define pb push_back
#define mp make_pair

using namespace std;

vector <pair <int ,int > >v[NMAX];

priority_queue <pair <int ,int > >q;

int best[NMAX];
int n,m,x,y,z;

inline void init(int a,int b,int v[]){
    for (int i=a;i<=b;i++)v[i]=INF;
}

inline void dijkstra(){
    q.push(mp(0,1));
    while (!q.empty()){
        int dist=-q.top().first;
        int nodc=q.top().second;
        q.pop();

        for (auto it:v[nodc])
            if (dist+it.second<best[it.first]){
                best[it.first]=dist+it.second;
                q.push(mp(-best[it.first],it.first));
            }
    }
}

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);

    scanf("%d %d\n",&n,&m);
    for (int i=1;i<=n;i++){
        scanf("%d %d %d\n",&x,&y,&z);
        v[x].pb(mp(y,z));
        v[y].pb(mp(x,z));
    }

    init(2,n,best);
    dijkstra();

    for (int i=1;i<=n;i++)printf("%d ",best[i]);

    fclose(stdin);
    fclose(stdout);
}