Cod sursa(job #2499484)

Utilizator CiboAndreiAndrei Cibo CiboAndrei Data 26 noiembrie 2019 10:53:28
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

const int dim = 50001;
const int oo = INT_MAX / 2;

int n, m;
vector < pair <int, int> > v[dim];
int dist[dim];

void dijkstra(int start){
    fill_n(dist, dim, oo);
    dist[start] = 0;

    priority_queue < pair <int, int> > pq;
    pq.push({start, 0});

    while(!pq.empty()){
        auto frnt = pq.top(); pq.pop();

        if(-frnt.second > dist[frnt.first])
            continue;

        for(auto it: v[frnt.first]){
            if(dist[it.first] > dist[frnt.first] + it.second){
                dist[it.first] = dist[frnt.first] + it.second;
                pq.push({it.first, -dist[it.first]});
            }
        }
    }
}

int main()
{
    int i, a, b, x;

    f >> n >> m;

    for(i = 1; i <= m; ++i){
        f >> a >> b >> x;
        v[a].push_back({b, x});
    }

    dijkstra(1);

    for(i = 2; i <= n; ++i)
        g << (dist[i] < oo ? dist[i] : 0) << " ";

    return 0;
}