Pagini recente » Cod sursa (job #2852423) | Cod sursa (job #2881393) | Cod sursa (job #1420989) | Cod sursa (job #277001) | Cod sursa (job #2603143)
#include <bits/stdc++.h>
using namespace std;
vector<int> dijkstra(int n, vector<pair<int, int>> adj[]) {
vector<int> dist(n + 1, INT_MAX);
dist[1] = 0;
auto cmp = [&dist](const pair<int, int> &a, const pair<int, int> &b) {
return dist[a.first] > dist[b.first];
};
priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)> Q(cmp);
Q.push(make_pair(1, 0));
while (!Q.empty()) {
pair<int, int> pp = Q.top();
Q.pop();
if (pp.second != dist[pp.first])
continue;
int x = pp.first;
for (auto &neighbor : adj[x])
if (dist[neighbor.first] > dist[x] + neighbor.second) {
dist[neighbor.first] = dist[x] + neighbor.second;
Q.push(make_pair(neighbor.first, dist[neighbor.first]));
}
}
return dist;
}
int main() {
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n, m, x, y, c;
fin >> n >> m;
vector<pair<int, int>> adj[n + 1];
while (m--) {
fin >> x >> y >> c;
adj[x].emplace_back(make_pair(y, c));
}
vector<int> dist = dijkstra(n, adj);
for (int i = 2; i < dist.size(); i++)
fout << (dist[i] == INT_MAX ? 0 : dist[i]) << " ";
return 0;
}