Pagini recente » Cod sursa (job #1091490) | Cod sursa (job #1362045) | Cod sursa (job #285750) | Cod sursa (job #792617) | Cod sursa (job #2960217)
/*
* https://www.infoarena.ro/problema/dijkstra
* Complexity: O(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;
vector<int> dist, parrent;
void init(){
s = 1;
adjList.resize(V+1);
dist.resize(V+1, INT_MAX);
parrent.resize(V+1);
dist[s] = parrent[s] = 0;
}
void read(){
in >> V >> E;
init();
for(int i = 1; i <= E; i++){
int u, v, w;
in >> u >> v >> w;
adjList[u].emplace_back(v, w);
}
}
void dijkstra(){
priority_queue<pair<int, int>> q;
vector<bool> visited(V+1);
q.push({dist[s], s});
visited[s] = true;
while(!q.empty()){
int u = q.top().second;
q.pop();
for(auto edge: adjList[u]){
int v, w;
v = edge.first;
w = edge.second;
if(visited[v])
continue;
if(dist[u]+w < dist[v]){
dist[v] = dist[u]+w;
parrent[v] = u;
q.push({-dist[v], v});
visited[v] = true;
}
}
}
}
void print(){
for(int u = 1; u <= V; u++){
cout << u << ": ";
for(auto edge: adjList[u]) {
int v, w;
v = edge.first;
w = edge.second;
cout << "{" << v << ", " << w << "} ";
}
cout << endl;
}
}
int main() {
read();
dijkstra();
for(int u = 2; u <= V; ++u) {
if (dist[u] == INT_MAX)
out << "0 ";
else
out << dist[u] << ' ';
}
return 0;
}