Cod sursa(job #2951812)

Utilizator petru.theodorCristea Petru Theodor petru.theodor Data 7 decembrie 2022 12:52:06
Problema Algoritmul lui Dijkstra Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <bits/stdc++.h>

using namespace std;

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

vector<pair<int, int>> graf[50003];   //perechi sa tinem distanta
priority_queue<pair<int, int>> q;
int minim[50003];

void dijkstra(int src) {

    q.push ( { 0 , src }) ;
	minim [src] = 0 ;

    while (!q.empty()) {
        int nod = q.top().second;
        q.pop();

        for (auto& v : graf[nod]) {

            if (minim[nod] + v.second < minim[v.first]) {
                //am gasit un drum mai scurt deci actualizam
                minim[v.first] = minim[nod] + v.second;
                q.push({minim[v.first], v.first}); //punem perechea in coada pentru a o utiliza ulterior
            }
        }
    }
}


int main()
{
    int n, m;

    fin>>n>>m;

    for (int i = 1; i <= n; i++)
        minim[i] = 1e9;

    for (int i = 1; i <= m; i++) {
        int x, y, z;
        fin >> x >> y >> z;
        graf[x].push_back({y, z});  //distanta de la x la y este z
//        graf[y].push_back({x, z});  //distanta de la y la x este z
    }
    dijkstra(1);
    for(int i=2; i<=n; i++){
        if(minim[i] == 1e9)
            fout<<0<<' ';
        else
            fout<<minim[i]<<' ';
    }
}