Cod sursa(job #1574898)

Utilizator robertstrecheStreche Robert robertstreche Data 20 ianuarie 2016 22:10:52
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>
#include <vector>
#include <queue>

#define NMAX 50005
#define INF 50000000
#define mp make_pair
#define pb push_back

using namespace std;

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

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

void init(){
   for (int i=2;i<=n;i++)
     best[i]=INF;
}
void dijkstra(int start){
    q.push(mp(-0,start));

    while (!q.empty()){
        int nod=q.top().second;
        q.pop();

        for (auto it:v[nod])
        if (best[it.first]>best[nod]+it.second){
            best[it.first]=best[nod]+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 (;m;m--){
        scanf("%d %d %d\n",&x,&y,&z);
        v[x].pb(mp(y,z));
        v[y].pb(mp(x,z));
    }
    init();
    dijkstra(1);

    for (int i=2;i<=n;i++)
      printf("%d ",(best[i]!=INF?best[i]:0));

    fclose(stdin);
    fclose(stdout);
}