Cod sursa(job #3350884)

Utilizator EricMartinmartin petru eric EricMartin Data 14 aprilie 2026 17:11:13
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

ifstream cin ("dijkstra.in");
ofstream cout ("dijkstra.out");

vector<pair<int , int>> g[100001];
int viz[100001];
long long dist[100001];

void dijkstra (int x)
{
    priority_queue<pair<int , int>> q;
    dist[x] = 0;
    q.push({0 , x});
    while (q.size() > 0)
    {
        int nod1 = q.top().second;
        q.pop();
        if (viz[nod1] == 0)
        {
            viz[nod1] = 1;
            for (int i = 0; i < g[nod1].size(); i++)
            {
                int nod2 = g[nod1][i].first;
                int cost = g[nod1][i].second;
                if (dist[nod1] + cost < dist[nod2])
                {
                    dist[nod2] = dist[nod1] + cost;
                    q.push({-dist[nod2] , nod2});
                }
            }
        }
    }
}

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