Cod sursa(job #3346052)

Utilizator razvanantonAnton Razvan-Stefan razvananton Data 12 martie 2026 11:34:17
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.51 kb
#include <vector>
#include <algorithm>
#include <climits>
#include <iostream>
#include <fstream>
#include <climits>
#include <queue>

using namespace std;

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

struct Node
{
    int id,w;
};

const int maxS=50005;

int dis[maxS];

vector<Node> adj[maxS];

struct Cmp
{
    bool operator()(const Node& a,const Node& b)
    {
        return a.w > b.w;
        // are a prioritate mai mica decat b? Daca da, a e trimis la final, b la inceput
    }
};

priority_queue<Node, vector<Node>, Cmp> pq;


int main()
{
    int m,n;
    fin>>n>>m;
    for(int i=2;i<=n;++i)
        dis[i]=INT_MAX;
    dis[1]=0;
    for(int i=1;i<=m;++i)
    {
        int a,b,c;
        fin>>a>>b>>c;
        Node n1,n2;
        n1.w=c;
        n1.id=a;
        n2.w=c;
        n2.id=b;
        adj[b].push_back(n1);
        adj[a].push_back(n2);
    }
    Node start;
    start.w=dis[1];
    start.id=1;
    pq.push(start);


    while(!pq.empty())
    {
        // while(!pq.empty() and dis[pq.top().id]!=INT_MAX)
        // {
        //     pq.pop();
        // }
        int curr=pq.top().id;
        pq.pop();
        for(auto n: adj[curr])
        {
            if(dis[n.id]==INT_MAX)   // if uncompleted
            {
                n.w=dis[curr]+n.w;
                pq.push(n);
            }
        }
        if(dis[pq.top().id]==INT_MAX)
            dis[pq.top().id]=pq.top().w;
    }
    for(int i=2;i<n;++i)
    {
        fout<<min(INT_MAX,dis[i])<<' ';
    }
    fout<<min(INT_MAX,dis[n]);


    return 0;
}