Advertisement
unnumsykar

djikstra

Apr 7th, 2023
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.42 KB | Source Code | 0 0
  1. #include <stdio.h>
  2. #include <algorithm>
  3. #include <vector>
  4. #include<queue>
  5. #include<limits.h>
  6. #include<functional>
  7. using namespace std;
  8. FILE *in = stdin;
  9. FILE *out = stdout;
  10. typedef pair<int, int> pii;
  11. int n, m;
  12. vector <pii> v[100005];
  13. long long dis[100005];
  14. int p[100005];
  15. int ans[100005];
  16. int main() {
  17.     fscanf(in, "%d %d", &n, &m);
  18.     for (int i = 1; i <= n; i++) {
  19.         dis[i] = LLONG_MAX;
  20.     }
  21.     for (int i = 1; i <= m; i++) {
  22.         int x, y, z;
  23.         fscanf(in, "%d %d %d", &x, &y, &z);
  24.         v[x].push_back(make_pair(z, y));
  25.         v[y].push_back(make_pair(z, x));
  26.     }
  27.     dis[1] = 0;
  28.     priority_queue<pair<long long, int>, vector<pair<long long, int> >, greater<pair<long long, int> >> pq;
  29.     pq.push(make_pair(0, 1));
  30.     while (!pq.empty()) {
  31.         int pos = pq.top().second;
  32.         pq.pop();
  33.         for (int i = 0; i < v[pos].size(); i++) {
  34.             if (v[pos][i].first + dis[pos] < dis[v[pos][i].second]) {
  35.                 pq.push(make_pair(v[pos][i].first + dis[pos], v[pos][i].second));
  36.                 dis[v[pos][i].second] = v[pos][i].first + dis[pos];
  37.                 p[v[pos][i].second] = pos;
  38.             }
  39.         }
  40.     }  
  41.     int now = n;
  42.     int dude = 1;
  43.     int check = 1;
  44.     bool bro = false;
  45.     while (now != 1) {
  46.         ans[dude] = now;
  47.         dude++;
  48.         now = p[now];
  49.         if (check > n) {
  50.             bro = true;
  51.             break;
  52.         }
  53.         check++;
  54.     }
  55.     if (bro) fprintf(out, "-1");
  56.     else {
  57.         fprintf(out, "1 ");
  58.         for (int i = dude - 1; i >= 1; i--) {
  59.             fprintf(out, "%d ", ans[i]);
  60.         }
  61.     }
  62.     return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement