Cod sursa(job #1374551)

Utilizator margikiMargeloiu Andrei margiki Data 5 martie 2015 09:57:31
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
# include <fstream>
# include <algorithm>
# include <vector>
# define inf 999999999
# define NR 50005
using namespace std;
ifstream f("djikstra.in");
ofstream g("djikstra.out");
vector <pair <int, int> > v[NR], var;
int i,j,n,m,x,y,cost;
int C[NR];
void djikstra ()
{
    int i, k, cact, urm, cost;
    while (var.size())
    {
        cact=-var[0].first;
        k=var[0].second;

        pop_heap(var.begin(), var.end());
        var.pop_back();

        if (cact>C[k]) continue; //daca nu e cel mai optim

        for (i=0; i<v[k].size(); ++i)
        {
            urm=v[k][i].first; cost=v[k][i].second;
            if (C[k]+cost<C[urm])
            {
                C[urm]=C[k]+cost;
                var.push_back(make_pair(-C[urm], urm));
            }
        }
    }
}
int main ()
{
    f>>n>>m;
    for (i=1; i<=m; ++i)
    {
        f>>x>>y>>cost;
        v[x].push_back(make_pair(y, cost));
        v[y].push_back(make_pair(x, cost));
    }
    for (i=2; i<=n; ++i)
        C[i]=inf;

    var.push_back(make_pair(0, 1));
    push_heap(var.begin(), var.end());

    djikstra ();

    for (i=2; i<=n; ++i)
        g<<C[i]<<" ";
    g<<"\n";

    return 0;
}