Cod sursa(job #3338251)

Utilizator liadariaLia Daria Ostafi liadaria Data 1 februarie 2026 21:09:43
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.54 kb
#include <fstream>
#include <queue>
#include <vector>
#define INF 1e9
#define NMAX 50001
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct varf{int x,c;};
int n,m,start=1;
int pre[NMAX],cmin[NMAX];
bool uz[NMAX];
vector<varf>G[NMAX];
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq;
void citire();
void dijkstra();
void afisare();
int main()
{
    citire();
    dijkstra();
    afisare();
    return 0;
}
void citire()
{
    int i,j,cost,x;
    varf vf;
    fin>>n>>m;
    for(x=1;x<=m;x++)
    {
        fin>>i>>j>>cost;
        vf.x=j; vf.c=cost;
        G[i].push_back(vf);
    }
}
void dijkstra()
{
    int i,j,minim,vfmin,vf,cost;
    for(i=1;i<=n;i++)
    {
        cmin[i]=INF;
        pre[i]=start;
    }
    cmin[start]=pre[start]=0;
    pq.push({0,start});
    while(!pq.empty())
    {
        pair<int,int>p=pq.top();
        pq.pop();
        minim=p.first;
        vfmin=p.second;
        if (minim != cmin[vfmin]) continue;
        if(uz[vfmin]) continue;
        uz[vfmin]=1;
        for(j=0;j<G[vfmin].size();j++)
        {
            vf=G[vfmin][j].x;
            cost=G[vfmin][j].c;
            if(!uz[vf] && cmin[vf]>cost+cmin[vfmin])
            {
                cmin[vf]=cost+cmin[vfmin];
                pre[vf]=vfmin;
                pq.push({cmin[vf],vf});
            }
        }
    }
}
void afisare()
{
    int i;
    for(i=2;i<=n;i++)
        if(cmin[i]==INF) fout<<0<<' ';
        else fout<<cmin[i]<<' ';
}