Cod sursa(job #2085779)

Utilizator RaduGiucleaGiuclea Radu RaduGiuclea Data 10 decembrie 2017 18:20:55
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
int dist[50002],n,m;
vector < pair<int,int> > g[50002];
priority_queue < pair<int,int> > heap;
void dijkstra(int start)
{
    int node,cost,son,costs,i,l;
    for(i=1;i<=n;i++)
        dist[i]=2000000000;
    dist[start]=1;
    heap.push({0,start});
    while(!heap.empty())
    {
        cost=-heap.top().first;
        node=heap.top().second;
        heap.pop();
        if(cost<=dist[node])
        {
            l=g[node].size();
            for(i=0;i<l;i++)
            {
                costs=g[node][i].first;
                son=g[node][i].second;
                if(dist[son]>cost+costs)
                    {dist[son]=cost+costs;
                    heap.push({-dist[son],son});}
            }
        }
    }
}
int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    int i,a,b,c;
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&a,&b,&c);
        g[a].push_back({c,b});
        g[b].push_back({c,a});
    }
    dijkstra(1);
    for(i=2;i<=n;i++)
        printf("%d ",dist[i]);
    return 0;
}