Cod sursa(job #407356)

Utilizator raica_cristiraica dumitru cristian raica_cristi Data 2 martie 2010 11:38:09
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.53 kb
#include<stdio.h>
#include<ctype.h>
#include<vector>
#include<queue>

using namespace std;
#define mp make_pair
#define fs first
#define sc second
#define pb push_back
#define dim 50050
#define inf 0x3f3f3f3f

queue <int> q;
vector <pair<int,int> > v[dim];
int n,m,dst [ dim ];

inline void add(int &x,int &y, int &c)
{
       v[x].pb(mp(y,c));
}
inline void read()
{
     int x,y,c;
     scanf("%d%d",&n,&m);
     for(int i=1; i<=m; i++)
     {
             scanf("%d%d%d",&x,&y,&c);
             add( x, y ,c);
     }
     
}
void solve()
{
     int nod;
     memset ( dst , inf, sizeof(dst));
     dst[ 1 ]=0;
     for( q.push (1) ; !q.empty(); q.pop() )
     {
          nod = q.front ();
          for(int i= 0 ; i< v[nod].size(); i ++)
          {
                //  printf("%d %d\n",nod ,dst [ nod ]);
               //   printf("%d= %d+ %d\n",dst[ v[nod][i].fs ], v[ nod ][ i ].sc , dst[ nod ]);
                  if ( dst[ v[nod][i].fs ]> v[ nod ][ i ].sc + dst[ nod ])
                  {
                        dst[ v[nod][i].fs ] = v[ nod ][ i ].sc + dst[ nod ];
                        q.push(v[ nod ][ i ].fs)  ;
                       
                        }
                  }
                  
      }
      for(int i=2 ;i<=n;i++)
      if ( dst[i] != inf)
      printf("%d ",dst[i]);
      else
      printf("0 ");
      printf("\n");
}
int main ()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    read();
    solve();
    return 0;
}