Cod sursa(job #3354271)

Utilizator adri22adria gram adri22 Data 17 mai 2026 11:24:03
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include <queue>
#include <vector>
#include <fstream>

using namespace std;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

struct Node{
    int dist, next;
    bool operator < (const Node & other) const{
        return dist > other.dist;
    }
};
const int INF = 1e9;
vector<vector<pair<int, int>>> graf;
vector<int> distant;

void dijkstra(int start, int n)
{
    for(int i = 0; i <= n; i++)
    {
        distant.push_back(INF);
    }    
    priority_queue <Node>pq;
    distant[start] = 0;
    pq.push({0, start});
    while(!pq.empty())
    {
        Node curent = pq.top();
        pq.pop();
        int u = curent.next;
        int d = curent.dist;
        
        for(auto &vecin : graf[u])
        {
            int v = vecin.first;
            int cost = vecin.second;
            
            if(distant[u] + cost < distant[v])
            {
                distant[v] = distant[u] + cost;
                pq.push({distant[v], v});
            }
        }
    }
}

int main()
{
    int muchii, noduri, a, b, c;
    fin >> noduri >> muchii;
    graf.resize(noduri+1);
    for(int i = 0; i < muchii; i++)
    {
        fin >> a >> b >> c;
        graf[a].push_back({b, c});
    }
    dijkstra(1, noduri);
    for(int i = 2; i <= noduri; i++)
    {
        if(distant[i] == INF)
            fout << '0' << ' ';
        else
            fout << distant[i] << ' ';
    }
    
    return 0;
}