Cod sursa(job #2936224)

Utilizator ralucarRogoza Raluca ralucar Data 8 noiembrie 2022 12:38:32
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

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

int n, m, x, y, c;
const int INF = 1e18;
priority_queue <pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;
vector<vector<pair<int,int>>>lista_adiacenta(10000);
vector<int> dist(n+1);
vector<int> tata(n+1);
vector<int> vizitat(n+1);


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(make_pair(dist[s], s));
    while(!pq.empty()){
        int nod = pq.top().second;
        pq.pop();
        for(auto i: lista_adiacenta[nod]){
            int vecin = i.first;
            int cost = i.second;
            if(vizitat[vecin] == 0){
                if(dist[nod] + cost < dist[vecin]){
                    dist[vecin] = dist[nod] + cost;
                    tata[vecin] = nod;
                    pq.push(make_pair(dist[vecin], vecin));
                }
            }
            vizitat[vecin]=1;
        }
    }
}


int main() {
    fin>>n>>m;
    for(int i=0; i<m; i++){
        fin>>x>>y>>c;
        lista_adiacenta[x].push_back(make_pair(y, c));
    }
    dijkstra(1);
    for(int i=2; i<=n; i++){
        if(dist[i]==INF)
            fout<<0<<" ";
        else
            fout<<dist[i]<<" ";
    }
    //cout<<dist[5];
    return 0;
}