Pagini recente » Cod sursa (job #1370001) | Cod sursa (job #822156) | Cod sursa (job #588279) | Cod sursa (job #2878598) | Cod sursa (job #2970208)
/*
* https://www.infoarena.ro/problema/dijkstra
* O (V+E*logV) .
*/
#include <bits/stdc++.h>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
int V, E, s;
vector<vector<pair<int, int>>> adjList;
void init(){
s = 1;
adjList.resize(V+1);
}
void read(){
in >> V >> E;
init();
for(int i = 0; i < E; i++){
int u, v, w;
in >> u >> v >> w;
adjList[u].emplace_back(v, w);
}
in.close();
}
void dijkstra(){
vector<int> d(V+1, INT_MAX), parent(V+1);
d[s] = parent[s] = 0;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> heap;
heap.push({d[s], s});
while(!heap.empty()){
int u = heap.top().second;
heap.pop();
for(const auto & edge : adjList[u]){
int v = edge.first;
int w = edge.second;
if(d[u] + w < d[v]){
d[v] = d[u] + w;
parent[v] = u;
heap.push({d[v], v});
}
}
}
for(int i = 1; i <= V; i++){
if(i == s)
continue;
else
if(d[i] == INT_MAX)
out << 0 << ' ';
else
out << d[i] << ' ';
}
out.close();
}
int main() {
read();
dijkstra();
return 0;
}