tien_noob

Dijsktra

May 17th, 2021 (edited)
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.62 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define TASK "DIJKSTRA"
  3. using namespace std;
  4. const int N = 1e5;
  5. const long long oo = 1e18;
  6. long long d[N + 1], z;
  7. int n, m, x, y;
  8. struct T
  9. {
  10.     int v;
  11.     long long w;
  12. };
  13. struct TQueue
  14. {
  15.     int vertex;
  16.     long long dlab;
  17.     bool operator < (const TQueue& other) const
  18.     {
  19.         return other.dlab < dlab;
  20.     }
  21.     bool Valid() const
  22.     {
  23.         return d[vertex] == dlab;
  24.     }
  25. };
  26. vector<T> Adj[N + 1];
  27. priority_queue<TQueue> PQ;
  28. bool Relax(int u, int v, long long w)
  29. {
  30.     if (d[v] > d[u] + w)
  31.     {
  32.         d[v] = d[u] + w;
  33.         return true;
  34.     }
  35.     return false;
  36. }
  37. void read()
  38. {
  39.    cin >> n >> m;
  40.    fill(d + 2, d + n + 1, oo);
  41.    for (int i = 1; i <= m; ++ i)
  42.    {
  43.        cin >> x >> y >> z;
  44.        Adj[x].push_back({y, z});
  45.    }
  46. }
  47. void solve()
  48. {
  49.    PQ.push({1, 0});
  50.    while (!PQ.empty())
  51.    {
  52.        TQueue r = PQ.top();
  53.        PQ.pop();
  54.        if (!r.Valid())
  55.        {
  56.            continue;
  57.        }
  58.        int u = r.vertex;
  59.        if (u == n)
  60.        {
  61.            break;
  62.        }
  63.        for (const T & a : Adj[u])
  64.        {
  65.            if (Relax(u, a.v, a.w))
  66.            {
  67.                PQ.push({a.v, d[a.v]});
  68.            }
  69.        }
  70.    }
  71.    if (d[n] == oo)
  72.    {
  73.        cout << -1; return ;
  74.    }
  75.    cout << d[n];
  76. }
  77. int main()
  78. {
  79.    ios_base::sync_with_stdio(false);
  80.    cin.tie(nullptr);
  81.    freopen(TASK".INP", "r", stdin);
  82.    freopen(TASK".OUT", "w", stdout);
  83.    int t = 1;
  84.    bool typetest = false;
  85.    if (typetest)
  86.    {
  87.       cin >> t;
  88.    }
  89.    for (int __ = 1; __ <= t; ++ __)
  90.    {
  91.       read();
  92.       solve();
  93.    }
  94. }
  95.  
Add Comment
Please, Sign In to add comment