Cod sursa(job #794678)

Utilizator desoComan Andrei deso Data 6 octombrie 2012 20:04:31
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <cstring>
#include <queue>
#include <vector>
using namespace std;

#define INFILE "dijkstra.in" 
#define OUTFILE "dijkstra.out"
#define pb push_back
#define pii pair<int,int>
#define NMAX 50010
#define inf 50000000

vector< vector< pii > > e(NMAX);
int n, m, dist[NMAX];
priority_queue<pii, vector<pii >, greater<pii > > q;
bool set[NMAX];

void dijkstra(int start) {
   q.push(make_pair(0, start));
   while( !q.empty() )
   {
      pii nod = q.top(); 
      q.pop();
      // first = cost, second = vecin
      if( set[nod.second] ) continue;

      dist[nod.second] = nod.first;
      set[nod.second] = true;
      for(vector<pii >::iterator it=e[nod.second].begin(); it!=e[nod.second].end(); it++)
         if( !set[ it->second ] )
            q.push(make_pair(it->first + nod.first, it->second));
   }
}

int main() {
   freopen(INFILE, "r", stdin);
   freopen(OUTFILE, "w", stdout);

   scanf("%d %d ", &n, &m);
   for(int i=0; i<m; i++) {
      int a, b, c;
      scanf("%d %d %d", &a, &b, &c);
      e[a-1].pb(make_pair(c, b-1));
   }

   dijkstra(0);
   for(int i=1; i<n; i++)
      printf("%d ", (dist[i]==inf ? 0 : dist[i]));

   return 0;
}