Cod sursa(job #3263208)

Utilizator Octa-pe-infoNechifor Octavian Octa-pe-info Data 13 decembrie 2024 20:13:34
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <vector>
#include <queue>
#include <climits>
#include <fstream>
using namespace std;
///1 -> celelalte
vector<vector<pair<int,long long>>>tabel;
vector<bool>viz;
vector<long long>mini;

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

void d(int nod) {
    priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<pair<long long, int>>> q;

    q.push({0, nod});
    mini[nod] = 0;

    while (!q.empty()) {
        auto current = q.top();
        q.pop();
        int currentNode = current.second;

        if (viz[currentNode]) continue;
        viz[currentNode] = true;

        for (auto& i : tabel[currentNode]) {
            int vec = i.first;
            long long newDist = mini[currentNode] + i.second;
            if (newDist < mini[vec] && !viz[vec]) {
                mini[vec] = newDist;
                q.push({mini[vec], vec});
            }
        }
    }
}


int main()
{
    ios_base::sync_with_stdio(false);
	cin.tie(NULL);
    int n,m;
    fin>>n>>m;
    tabel.resize(n+1);
    viz.resize(n+1);
    mini.resize(n+1,LLONG_MAX);

    for(int i=1;i<=m;i++){

        int x,y,z;
        fin>>x>>y>>z;
        tabel[x].push_back({y,z});

    }

    d(1);
    for(int i=2;i<=n;i++)
        fout<<mini[i]<<" ";
    return 0;
}