Cod sursa(job #868020)

Utilizator mazaandreiAndrei Mazareanu mazaandrei Data 30 ianuarie 2013 16:14:11
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <vector>
#include <queue>
#define maxn 50001
#define oo 1<<30
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
int n,m,i,j,x,y,c;
vector <int> d(maxn,oo);
struct arc{int x , cost;};
struct cmp{
    bool operator()( int a, int b ){
        if(d[a]>d[b]) return 1;
        return 0;
    }
};
vector <arc> l[maxn];
priority_queue < int , vector < int > , cmp > q;
int main(){
    in >>n>>m;
    for (i=1;i<=m;++i){
        in>>x>>y>>c;
        l[x].push_back((arc){y,c});
    }
    d[1]=0;
    q.push(1);
    vector <arc> :: iterator it,sf;
    while ( !q.empty() ){
        x = q.top();
        q.pop();
        it=l[x].begin();
        sf=l[x].end();
        for (;it!=sf;++it){
            if (d[x]+(*it).cost < d[(*it).x]){
                d[(*it).x]=d[x]+(*it).cost;
                q.push((*it).x);
            }
        }
    }
    for (i=2;i<=n;++i )
    {
        if (d[i] != oo )
            out<<d[i]<<' ';
        else
            out<<"0 ";
    }
    out << '\n'; out.close();
    return 0;
}