Cod sursa(job #3041767)

Utilizator sipdavSipos David Oliver sipdav Data 1 aprilie 2023 14:48:25
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 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, cost[MAX_N + 1][MAX_N + 1], d[MAX_N + 1];
std::vector<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] > d[nod] + cost[nod][it])
            {
                d[it] = d[nod] + cost[nod][it];
                q.push(std::make_pair(d[it], it));
            }
        }
    }
}

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