Cod sursa(job #3328746)

Utilizator anghelmrsmanghel eduard anghelmrsm Data 10 decembrie 2025 01:29:33
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>
#include <climits>
#include <set>

using namespace std;

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

struct edge
{
    int v,w;
};

int n,m,d[50001];
vector <edge> vecin[250001];
bitset <50001> inQueue;
class compare
{
public:
    bool operator() (int x, int y)
    {
        return d[x] < d[y];
    }
};

priority_queue <int, vector <int>, compare> q;

void Djikstra (int start)
{
    for (int i=1; i<=n; i++)
        d[i] = INT_MAX;

    d[start] = 0;
    q.push(start);
    inQueue[start] = 1;

    while (!q.empty())
    {
        int nod = q.top();
        q.pop();
        inQueue[nod] = 0;

        for (auto e : vecin[nod])
            if (d[nod] + e.w < d[e.v])
            {
                d[e.v] = d[nod] + e.w;
                if (inQueue[e.v] == 0)
                {
                    inQueue[e.v] = 1;
                    q.push(e.v);
                }
            }

    }
}

int main()
{
    cin>>n>>m;
    for (int i=0; i<m; i++)
    {
        int x,y,cost;
        cin>>x>>y>>cost;

        edge e;
        e.v = y;
        e.w = cost;

        vecin[x].push_back(e);
    }
    Djikstra(1);
    for (int i=2; i<=n; i++)
        cout<<d[i]<<" ";
}