Cod sursa(job #1966304)

Utilizator patrutoiuandreipatrutoiu andrei patrutoiuandrei Data 15 aprilie 2017 09:36:42
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <vector>
#include <set>

#define Ndim 50001
#define oo 1<<30
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
vector < pair <int,int> > G[Ndim];
set <pair <int,int> > H;
int D[Ndim];
int main()
{
    int n,m,i,fiu,c,nod,a,b,cost;
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>a>>b>>c;
        G[a].push_back(make_pair(b,c));
    }
    for(i=2;i<=n;i++)
        D[i] = oo;
    H.insert(make_pair(0,1));
    while(!H.empty())
    {
        set <pair <int,int> > :: iterator it = H.begin();
        nod = it->second;
        H.erase(H.begin());
        for(size_t i=0;i<G[nod].size();i++)
        {
            fiu = G[nod][i].first;
            cost = G[nod][i].second;
            if(D[fiu]>D[nod]+cost)
            {
                if(D[fiu]!=oo)
                    H.erase(H.find(make_pair(D[fiu],fiu)));
                D[fiu] = D[nod]+cost;
                H.insert(make_pair(D[fiu],fiu));
            }
        }
    }
    for(i=2;i<=n;i++)
    {
        if(D[i]==oo)
            D[i] = 0;
        fout<<D[i]<<' ';
    }
    return 0;
}