Cod sursa(job #3271550)

Utilizator yawninghorseDragomir Alex yawninghorse Data 26 ianuarie 2025 15:49:12
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <vector>
#include <queue>
#include <climits>

using namespace std;

int n, m;
const int Nmax = 250005;
vector<pair<int, int>> lista[Nmax];
int viz[Nmax], dist[Nmax];
 
void dijkstra(int node)
{
    for(int i = 1; i <= n; i++)
    {
        viz[i] = false;
        dist[i] = INT_MAX;
    }
    dist[node] = 0;
    priority_queue<pair<int, int>> q;
    q.push({0, node});
    while(!q.empty())
    {
        int u = q.top().second;
        q.pop();
        if(viz[u] == true)
        {
            continue;
        }
        else
        {
            viz[u] = true;
            for(int i = 0; i < lista[u].size(); i++)
            {
                int v = lista[u][i].second;
                int c = lista[u][i].first;
                if(viz[v] == false and dist[v] > dist[u] + c)
                {
                    dist[v] = dist[u] + c;
                    q.push({-dist[v], v});
                }
            }
        }
    }
}

int main()
{
    cin >> n >> m;
    for(int i = 1; i <= m; i++)
    {
        int x, y, c;
        cin >> x >> y >> c;
        lista[x].push_back({c, y});
    }
    dijkstra(1);
    for(int i = 2; i <= n; i++)
    {
        if(dist[i] == INT_MAX)
            cout << 0 <<" ";
        else
            cout << dist[i] <<" ";
    }
    return 0;
}