Cod sursa(job #3323290)

Utilizator Mirc100Mircea Octavian Mirc100 Data 17 noiembrie 2025 23:20:08
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>
#include <queue>
#include <algorithm>
#define infinit 1e9

using namespace std;

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

int n, m;
vector<vector<pair<int, int>>> adj;


vector<int>  Dijkstra(int s ){
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
    vector<int> d(n+1, infinit), tata(n+1, 0), viz(n+1, 0);
    d[s] = 0;
    q.push({d[s], s});
    while(!q.empty()){
        pair<int, int> p = q.top();
        q.pop();
        if (viz[p.second]==1) continue; //ignoram nodurile care au mai fost deja vizitate, acum sunt extrase copii ale lor cu etichete mai mari
        viz[p.second] = 1;

        for(auto &nod : adj[p.second]){
            int vf = nod.first;
            int cost = nod.second;
            if(d[vf] > d[p.second]+cost && !viz[vf]){
                tata[vf] = p.second;
                d[vf] = d[p.second]+cost;
                q.push({d[vf], vf});
            }
        }
    }
   return d;
}
int main(){
    fin>>n>>m;
    adj.resize(n+1);
    while(m--){
        int x, y, cost;
        fin>>x>>y>>cost;
        adj[x].push_back({y, cost});

    }


    int cost = 0;
    vector<int> dist=Dijkstra(1 );


    for(int v=2;v<=n;v++)
        if(dist[v]==infinit)
                fout<<"0 ";
        else
            fout<<dist[v]<<" ";

    fout.close();
    return 0;
}