Cod sursa(job #2513865)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 23 decembrie 2019 22:38:48
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <cstdio>
#include <vector>
#include <queue>
#define nod first
#define cost second
using namespace std;
const int INF = 2.e9;
const int NMAX = 50000;
typedef pair <int , int> ii;
typedef vector <ii> vii;
vii G[NMAX + 5];
int d[NMAX + 5];
priority_queue <ii , vii , greater<ii> > pq;
int main()
{
    freopen("dijkstra.in" , "r" , stdin);
    freopen("dijkstra.out" , "w" , stdout);
    int n , m , x , y , z , i , j , dist;
    ii temp;
    scanf("%d%d" , &n , &m);
    for(i = 1 ; i <= m ; i ++)
    {
        scanf("%d%d%d" , &x , &y , &z);
        G[x].push_back(make_pair(y , z));
    }
    for(i = 2 ; i <= n ; i ++)
        d[i] = INF;
    pq.push(make_pair(1 , 0));
    while(!pq.empty())
    {
        temp = pq.top();
        pq.pop();
        x = temp.nod;
        dist = temp.cost;
        if(dist > d[x])
            continue;
        for(j = 0 ; j < G[x].size() ; j ++)
        {
            y = G[x][j].nod;
            z = G[x][j].cost;
            if(d[y] > d[x] + z)
            {
                d[y] = d[x] + z;
                pq.push(make_pair(y , d[y]));
            }
        }
    }
    for(i = 2 ; i <= n ; i ++)
    {
        if(d[i] == INF)
            d[i] = 0;
        printf("%d " , d[i]);
    }
    return 0;
}