Cod sursa(job #2937170)

Utilizator ralucarRogoza Raluca ralucar Data 9 noiembrie 2022 23:56:58
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb

#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f

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

int n, m, x, y, c;

priority_queue <pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;
vector<pair<int,int>>lista_adiacenta[100005];
vector<int> dist(100005);
vector<int> tata(100005);
vector<int> vizitat(100005);


void dijkstra(int s){
    for(int i=1; i<=n; i++){
        dist[i]=inf;
        vizitat[i]=0;
        tata[i]=0;
    }
    dist[s]=0;
    pq.push({dist[s], s});
    while(!pq.empty()){
        int nod = pq.top().second;
        pq.pop();
        if(vizitat[nod] == 0){
            vizitat[nod] = 1;
            for(auto i: lista_adiacenta[nod]){
                int vecin = i.first;
                int cost = i.second;
                if(dist[nod] + cost < dist[vecin]){
                    dist[vecin] = dist[nod] + cost;
                    tata[vecin] = nod;
                    pq.push({dist[vecin], vecin});
                }
            }
        }
    }
}


int main() {
    fin>>n>>m;
    for(int i=0; i<m; i++){
        fin>>x>>y>>c;
        lista_adiacenta[x].push_back({y, c});
    }

    for(int i=2; i<=n; i++){
        if(dist[i]!=inf)
            fout<<dist[i]<<" ";
        else
            fout<<0<<" ";
    }
    return 0;
}