Pagini recente » Cod sursa (job #809225) | Cod sursa (job #416867) | Cod sursa (job #851599) | Cod sursa (job #1361762) | Cod sursa (job #3213430)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int kInf = 1e9;
vector<int> dij(int s, const vector<vector<pair<int, int>>> &adj) {
int n = adj.size();
vector<int> dist(n, kInf);
struct node_t {
int u, d;
node_t() {}
node_t(int u, int d): u(u), d(d) {}
bool operator <(const node_t &oth) const {
return d < oth.d;
}
};
priority_queue<node_t> pq;
dist[s] = 0;
pq.emplace(s, dist[s]);
while(!pq.empty()) {
auto [u, d] = pq.top();
pq.pop();
if(d != dist[u]) continue;
for(const auto &[v, c]: adj[u]) {
if(dist[v] > d + c) {
dist[v] = d + c;
pq.emplace(v, dist[v]);
}
}
}
return dist;
}
int main() {
int n, m;
fin >> n >> m;
vector<vector<pair<int, int>>> adj(n);
for(int i = 0; i < m; i++) {
int u, v, c;
fin >> u >> v >> c;
u--; v--;
adj[u].emplace_back(v, c);
adj[v].emplace_back(u, c);
}
vector<int> dist = dij(0, adj);
for(int i = 1; i < n; i++) {
if(dist[i] == kInf) {
fout << "0 ";
} else {
fout << dist[i] << " ";
}
}
return 0;
}