Cod sursa(job #304780)

Utilizator mihai.cuculiciCuculici Mihail mihai.cuculici Data 15 aprilie 2009 12:45:20
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<fstream>
#include<queue>
#include<vector>
#include<bitset>
#define NMAX 250005
#define INF 0x3f3f3f3f
using namespace std;

struct muchie{
   unsigned nod;
   int cost;
};

ifstream f ("dijkstra.in");
ofstream g ("dijkstra.out");
vector<muchie> G[NMAX];
bitset<NMAX> viz;
queue<unsigned> Q;
unsigned i, N, M, x, D[NMAX];

void read()
{
     f>>N>>M;
     muchie aux;
     for(i=0;i<M;i++) f>>x>>aux.nod>>aux.cost, G[x].push_back(aux);
}

void solve()
{
     D[1]=0;
     viz[1]=1;
     Q.push(1);
     for(i=2;i<=N;i++) D[i]=INF;
     while(Q.size())
     {
        unsigned nod=Q.front();
        Q.pop();
        viz[nod]=0;
        for(i=0;i<G[nod].size();i++)   
            if(D[nod]+G[nod][i].cost<D[G[nod][i].nod]){
                D[G[nod][i].nod]=D[nod]+G[nod][i].cost;   
                if(!viz[G[nod][i].nod]) Q.push(G[nod][i].nod), viz[G[nod][i].nod] = 1;
            } 
     }
}

void write() {for(i=2;i<=N;i++) g<<(D[i]<INF ? D[i] : 0)<<" ";}

int main()
{
   read();
   solve();
   write();   
   return 0;
}