Cod sursa(job #3304434)

Utilizator deliaandreeaddelia andreea deliaandreead Data 23 iulie 2025 15:26:24
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>

using namespace std;

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

struct chestie{
    int nod;
    int lung;
    bool operator <(const chestie &other) const {
            return lung>other.lung;
    }
};

int dist[50001];
vector<vector<chestie>>v;
priority_queue<chestie>pq;

void dijkstra(int start){
    dist[start]=0;
    pq.push({start,0});
    while(!pq.empty()){
        chestie nod_act=pq.top();
        pq.pop();
        if(nod_act.lung<dist[nod_act.nod])
            continue;
        int n=nod_act.nod;
        for(int i=0;i<v[n].size();i++){
            chestie vec= v[n][i];
            if(vec.lung+nod_act.lung<dist[vec.nod]){
            //vec+dist pana la nodul curent< dist pana la vec pana acum
                dist[vec.nod]=vec.lung+nod_act.lung;
                pq.push({vec.nod,dist[vec.nod]});
            }
        }
    }
}

int main()
{
    int n,m;
    fin>>n>>m;
    v.resize(n+1);
    memset(dist,0x3F3F3F3F,sizeof dist);
    for(int i=1;i<=m;i++){
        int n1,n2,l;
        fin>>n1>>n2>>l;
        v[n1].push_back({n2,l});
    }
    dijkstra(1);
    for(int i=2;i<=n;i++){
        if(dist[i]!=0x3F3F3F3F)
            fout<<dist[i]<<" ";
    }
    
    return 0;
}