Cod sursa(job #3041771)

Utilizator sipdavSipos David Oliver sipdav Data 1 aprilie 2023 14:51:44
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>
#include <queue>

#define MAX_N 50000
const int oo = 1e9;

std::ifstream in("dijkstra.in");
std::ofstream out("dijkstra.out");

int n, m, d[MAX_N + 1];
std::vector<std::pair<int, int>> adj[MAX_N + 1];
std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int>>, std::greater<>> q;

void dijkstra()
{
    for(int i = 1;i <= n;i++)
        d[i] = oo;
    d[1] = 0;
    q.push(std::make_pair(0, 1));
    while(!q.empty())
    {
        int nod = q.top().second;
        int dist = q.top().first;
        q.pop();
        if(dist != d[nod]) continue;
        for(const auto& it: adj[nod])
        {
            if(d[it.first] > d[nod] + it.second)
            {
                d[it.first] = d[nod] + it.second;
                q.push(std::make_pair(d[it.first], it.first));
            }
        }
    }
}

int main()
{
    in>>n>>m;
    for(int i = 1;i <= m;i++)
    {
        int x, y, z;
        in>>x>>y>>z;
        adj[x].push_back(std::make_pair(y, z));
    }
    dijkstra();
    for(int i = 2;i <= n;i++)
        if(d[i] == oo)
            out<<0<<' ';
        else
            out<<d[i]<<' ';
    return 0;
}