Pagini recente » Cod sursa (job #2114652) | Cod sursa (job #333786) | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #3336152)
#include <algorithm>
#include <fstream>
#include <iostream>
#include <queue>
#include <vector>
#include <tuple>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
#define inf int(1e5)
vector<vector<pair<int,int>>> lista;
vector<bool> viz;
vector<int> rez;
int main(){
int n,m;
fin >> n >> m;
lista.resize(n+1);
viz.resize(n+1, false);
rez.resize(n+1, inf);
for (int i = 1; i<=m; i++) {
int u,v,c;
fin>>u>>v>>c;
lista[u].emplace_back(v,c);
lista[v].emplace_back(u,c);
}
priority_queue<tuple<int,int,int>, vector<tuple<int,int,int>>, greater<>> pq;
pq.emplace(0,1,-1);
rez[1] = 0;
while (!pq.empty()) {
auto [cost,u,tata] = pq.top();
pq.pop();
viz[u] = true;
for (auto [v,c] : lista[u]) {
if (!viz[v]) {
if (rez[v] > rez[u] + c) {
rez[v] = rez[u] + c;
pq.emplace(rez[v],v,u);
}
}
}
}
for (int i = 2; i<=n; i++) {
if (rez[i] == inf) {
fout<<0<<" ";
}
else{
fout<<rez[i]<<" ";
}
}
return 0;
}