Pagini recente » Cod sursa (job #1242634) | Cod sursa (job #636359) | Cod sursa (job #2720405) | Cod sursa (job #175797) | Cod sursa (job #2931630)
#include <bits/stdc++.h>
using namespace std;
#define INF 1e9
class graph {
vector<vector<pair<uint, int>>> adj;
uint nodes;
public:
graph(uint nodes) : adj(nodes), nodes(nodes) {}
void add_edge(uint x, uint y, int c) {
adj[x].push_back({y, c});
}
vector<uint> dijkstra(uint src) {
vector<uint> dist(nodes, INF);
dist[src] = 0;
auto cmp = [&](uint x, uint y) {
return dist[x] > dist[y];
};
priority_queue<uint, vector<uint>, decltype(cmp)> pq(cmp);
pq.push(src);
vector<bool> visited(nodes, false);
while (!pq.empty()) {
uint current = pq.top();
pq.pop();
if (visited[current])
continue;
visited[current] = true;
for (const auto& [neigh, cost] : adj[current])
if (dist[current] + cost < dist[neigh]) {
dist[neigh] = dist[current] + cost;
pq.push(neigh);
}
}
return dist;
}
};
int main() {
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
uint n, m;
fin >> n >> m;
graph g(n);
for (uint i = 0, x, y, c; i < m; ++i) {
fin >> x >> y >> c;
g.add_edge(x - 1, y - 1, c);
}
vector<uint> ans = g.dijkstra(0);
for (uint i = 1; i < n; ++i)
fout << (ans[i] == INF ? 0 : ans[i]) << ' ';
}