Cod sursa(job #1794213)

Utilizator zdavid112zIon David-Gabriel zdavid112z Data 1 noiembrie 2016 08:29:33
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <cstdio>
#include <queue>
#include <vector>
#define inf 2000000000

using namespace std;

struct Arc
{
    Arc(int ca, int co) : catre(ca), cost(co) {}
    int catre, cost;
    inline bool operator<(const Arc& a) const
    {
        return cost > a.cost;
    }
};

struct Nod
{
    vector<Arc> v;
    bool viz;
} v[50000];

int df[50000], n, m;
priority_queue<Arc> h;

int main()
{
    int i, j, a, b, c;
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    scanf("%d%d", &n, &m);
    for(i = 0; i < m; i++)
    {
        scanf("%d%d%d", &a, &b, &c);
        a--; b--;
        v[a].v.push_back(Arc(b, c));
    }
    for(i = 0; i < n; i++)
    {
        df[i] = inf;
    }
    df[0] = 0;
    for(i = 0; i < v[0].v.size(); i++)
    {
        df[v[0].v[i].catre] = v[0].v[i].cost;
        h.push(Arc(v[0].v[i].catre, v[0].v[i].cost));
    }
    while(!h.empty())
    {
        a = h.top().catre;
        h.pop();
        if(v[a].viz)
            continue;
        v[a].viz = true;
        for(i = 0; i < v[a].v.size(); i++)
        {
            if(df[v[a].v[i].catre] > df[a] + v[a].v[i].cost)
            {
                df[v[a].v[i].catre] = df[a] + v[a].v[i].cost;
                h.push(Arc(v[a].v[i].catre, df[v[a].v[i].catre]));
            }
        }
    }
    for(i = 1; i < n; i++)
        if(df[i] == inf) printf("0 ");
        else printf("%d ", df[i]);
    return 0;
}