Cod sursa(job #2513872)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 23 decembrie 2019 22:50:35
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <cstdio>
#include <vector>
#include <set>
#define cost first
#define nod second
using namespace std;
const int INF = 2.e9;
const int NMAX = 50000;
vector <pair <int , int> > G[NMAX + 5];
set <pair <int , int> > s;
int d[NMAX + 5];
int main()
{
    freopen("dijkstra.in" , "r" , stdin);
    freopen("dijkstra.out" , "w" , stdout);
    int n , m , x , y , z , i , j , dist;
    set <pair <int , int> >::iterator it;
    scanf("%d%d" , &n , &m);
    for(i = 1 ; i <= m ; i ++)
    {
        scanf("%d%d%d" , &x , &y , &z);
        G[x].push_back(make_pair(z , y));
    }
    for(i = 2 ; i <= n ; i ++)
        d[i] = INF;
    s.insert(make_pair(0 , 1));
    while(!s.empty())
    {
        it = s.begin();
        s.erase(s.begin());
        x = (*it).nod;
        dist = (*it).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;
                s.insert(make_pair(d[y] , y));
            }
        }
    }
    for(i = 2 ; i <= n ; i ++)
    {
        if(d[i] == INF)
            d[i] = 0;
        printf("%d " , d[i]);
    }
    return 0;
}