Cod sursa(job #1771047)

Utilizator popabogdanPopa Bogdan Ioan popabogdan Data 5 octombrie 2016 10:01:57
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <bits/stdc++.h>
#define inf (int)1e9
#define nmax 50001
#define pb push_back
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct arc
{
    int v,c;
};
int i,j,c,p;
int n;
int d[nmax],v[nmax];
vector<arc>g[nmax];
struct qx
{
    bool operator()(arc a, arc b)
    {
        return a.c>b.c;
    }
};
priority_queue < arc, vector<arc>, qx >coada;
void dijkstra(int p)
{
    int i;
    for(i=0;i<g[p].size();i++)
        {
            d[g[p][i].v]=g[p][i].c;
            coada.push(g[p][i]);
        }
    v[p]=0;
    int ok=0;
    arc f;
    while(!coada.empty())
    {
        f=coada.top();
        coada.pop();
        if(!v[f.v])
        {
            v[f.v]=1;
            for(i=0;i<g[f.v].size();i++)
                if(!v[g[f.v][i].v])
                    if(d[g[f.v][i].v]>d[f.v]+g[f.v][i].c)
                    {
                        d[g[f.v][i].v]=d[f.v]+g[f.v][i].c;
                        coada.push({g[f.v][i].v,d[g[f.v][i].v]});
                    }
        }
    }
}
int main()
{
    fin>>n>>p;
    while(fin>>i>>j>>c)
        g[i].pb({j,c});
    for(i=1;i<=n;i++)d[i]=inf;
    d[1]=0;
    dijkstra(1);
    for(i=2;i<=n;i++)
        fout<<(d[i]==inf ? 0 : d[i])<<" ";
    return 0;
}