Cod sursa(job #357379)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 19 octombrie 2009 07:55:04
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <cstdio>
#include <vector>
#include <queue>
#define DIM 1<<16
#define INF 1000000  

using namespace std;

vector <int> G[DIM], Cost[DIM];
queue <int> Q;
int n, m, x, y, c, i, visited[DIM];

void read() {
     
     scanf ("%d%d\n", &n, &m);
     for ( ; m-- ; ) {
         scanf ("%d%d%d", &x, &y, &c);
         G[x].push_back(y);
         Cost[x].push_back(c);
         }
}
void solve() {
     
     memset ( visited, INF, sizeof(visited) );
     Q.push(1);
     visited[1] = 0;          
     while ( Q.size () ) {
           x = Q.front();
           Q.pop();
           for (i = 0; i < G[x].size(); ++i) {
               if (Cost[x][i] + visited[x] < visited [ G[x][i] ]) {
                    visited[ G[x][i] ] = Cost[x][i] + visited[x];
                    Q.push ( G[x][i] );
                   }
               }
           }
     for (i = 2; i <= n; ++i) {
         x=visited[i];
         if ( x < 0 ) printf ("0 ");
         else printf ("%d ",x);
         }
}
      
int main()
{
    freopen ("dijkstra.in","r",stdin);
    freopen ("dijkstra.out","w",stdout);
    read();
    solve();
    return 0;
}
// See'ya next time with a harder problem solved :)