Cod sursa(job #2266763)

Utilizator Dragne.Andrei11Dragne Andrei Dragne.Andrei11 Data 22 octombrie 2018 21:18:22
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <bits/stdc++.h>

using namespace std;

const int nmax=50005;

vector <pair <int, int> > graph[nmax];
priority_queue <pair <int,int>, vector < pair <int,int> >, greater <pair <int,int> > > heap;
int dist[nmax];
int n;

void dij(int start_node)
{
    int son, nod, cost, distson;
    for(int i=1;i<=n;i++)
        dist[i]=1000000000;
    dist[start_node]=0;
    heap.push({0,start_node});
    while(heap.empty()==0)
    {
        nod=heap.top().second;
        cost=heap.top().first;
        heap.pop();
        if(cost<=dist[nod])
        {
            for(int i=0;i<graph[nod].size();i++)
            {
                son=graph[nod][i].first;
                distson=graph[nod][i].second;
                if(dist[son]>cost+distson)
                {
                    dist[son]=cost+distson;
                    heap.push({dist[son],son});
                }
            }
        }
    }
}

int main()
{
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    int m,i,j,cost,a,b;

    scanf("%d%d", &n, &m);
    for(i=0;i<m;i++)
    {
        scanf("%d%d%d", &a, &b, &cost);
        graph[a].push_back(make_pair(b,cost));
    }
    dij(1);
    for(i=2;i<=n;i++)
    {
        if(dist[i]!=1000000000)
            printf("%d ",dist[i]);
        else
            printf("0 ");
    }

    return 0;
}