Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define int int64_t
- vector<vector<pair<int, int>>> g;
- void dijkstra(int n, int st, vector<int>& d, vector<int>& p) {
- d.resize(n, 2e18);
- p.resize(n, -1);
- priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
- d[st] = 0;
- pq.push({d[st], st});
- vector<bool> handled(n);
- while (!pq.empty()) {
- int v = pq.top().second;
- pq.pop();
- if (handled[v]) {
- continue;
- }
- handled[v] = true;
- for (auto [to, len]: g[v]) {
- if (d[to] > d[v] + len) {
- d[to] = d[v] + len;
- p[to] = v;
- pq.push({d[to], to});
- }
- }
- }
- }
- int32_t main() {
- ios_base::sync_with_stdio(false);
- cin.tie(0); cout.tie(0);
- int n, m;
- cin >> n >> m;
- g.resize(n);
- for (int i = 0; i < m; i++) {
- int a, b, c;
- cin >> a >> b >> c;
- a--; b--;
- g[a].push_back({b, c});
- g[b].push_back({a, c});
- }
- vector<int> d, p;
- dijkstra(n, 0, d, p);
- int cur = n - 1;
- if (p[cur] == -1) {
- cout << -1 << '\n';
- return 0;
- }
- vector<int> path;
- while (cur != -1) {
- path.push_back(cur);
- cur = p[cur];
- }
- reverse(path.begin(), path.end());
- for (int v: path) {
- cout << v + 1 << ' ';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment