Cod sursa(job #1313612)

Utilizator alevasluialeHuhurez Marius alevasluiale Data 10 ianuarie 2015 21:38:31
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#include <queue>
#include <vector>
#include <bitset>
#include <cstring>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int inf=0x3f3f3f3f;
int Rlcost[50001];
struct graf
{
    int y,cost;
};
vector<graf>v[50001];
vector<graf>::iterator it;
struct cod
{
    int nod,cost;
};
struct comp
{
    bool operator() (const cod &a,const cod &b)
    {
        return a.cost>b.cost;
    }
};
priority_queue<cod,vector<cod>,comp> H;
inline void dijkstra(int i)
{
    for(it=v[i].begin();it!=v[i].end();it++)
    {
        int a=it->y;
        if(it->cost+Rlcost[i]<Rlcost[a])
        {
            cod pas;
            pas.nod=a;
            pas.cost=it->cost+Rlcost[i];
            Rlcost[a]=pas.cost;
            H.push(pas);
        }
    }
}
int main()
{
    memset(Rlcost,inf,sizeof(Rlcost));
    int n,q,m,i;
    graf pas;
    fin>>n>>m;
    for(q=1;q<=m;q++)
    {
        fin>>i>>pas.y>>pas.cost;
        v[i].push_back(pas);
    }
    cod rac;
    rac.nod=1;
    rac.cost=0;
    Rlcost[1]=0;
    H.push(rac);
    while(!H.empty())
    {
        if(H.top().cost>Rlcost[H.top().nod]) continue;
        i=H.top().nod;
        H.pop();
        dijkstra(i);
    }
    for(i=2;i<=n;i++)
    {
        if(Rlcost[i]==inf) fout<<"0 ";
        else fout<<Rlcost[i]<<" ";
    }
}