Cod sursa(job #3328039)

Utilizator Roberto_CChirvasitu Roberto Roberto_C Data 5 decembrie 2025 23:36:22
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <bits/stdc++.h>
using namespace std;

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

const int NMAX = 50000;
const long long INF = 2e18;

int n,m;
long long dist[NMAX+1];
vector<pair<int,int>>v[NMAX+1];

struct ura
{
    long long first;
    int second;
    bool operator<(const ura& a)const
    {
        return first>a.first;
    }
};

void dijkstra(int nod)
{
    for (int i = 1; i <= n; i++)
        dist[i] = INF;
    dist[nod] = 0;
    priority_queue<ura> pq;
    pq.push({0,nod});
    while (!pq.empty())
    {
        ura curr = pq.top();
        pq.pop();

        if (curr.first != dist[curr.second])
            continue;

        for (auto i : v[curr.second])
        {
            int nod_urm = i.first;
            int cost_urm = i.second;
            if (dist[curr.second] + cost_urm < dist[nod_urm])
            {
                dist[nod_urm] = dist[curr.second] + cost_urm;
                pq.push({dist[nod_urm],nod_urm});
            }
        }
    }
}

int main()
{
    fin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        int st,dr,c;
        fin >> st >> dr >> c;
        v[st].push_back({dr,c});
    }
    dijkstra(1);
    for (int i = 2; i <= n; i++)
        if(dist[i] == INF)
            fout << 0 << ' ';
        else
            fout << dist[i] << ' ';
    return 0;
}