Cod sursa(job #1767966)

Utilizator stelian2000Stelian Chichirim stelian2000 Data 29 septembrie 2016 22:28:34
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

const int INF=1000000000;

struct edge
{
    int nod,cost;
    bool operator <(const edge a) const
    {
        return cost>a.cost;
    }
};

vector<edge> v[50010];
priority_queue<edge> h;
int d[50010];

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