Advertisement
Guest User

Untitled

a guest
Mar 19th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.73 KB | None | 0 0
  1. #include <array>
  2. #include <vector>
  3. #include <iostream>
  4. #include <list>
  5. #include <algorithm>
  6. #include <queue>
  7. #include <climits>
  8.  
  9. const unsigned long long INF = ULONG_MAX;
  10.  
  11. using namespace std;
  12.  
  13. struct comp {
  14.     bool operator()(const pair<int, unsigned long long> &a, const pair<int, unsigned long long> &b) {
  15.         return a.second > b.second;
  16.     }
  17. };
  18. //g - список смежности
  19. //d массив меток
  20. //u массив посещений
  21. //pq minheap
  22. int main() {
  23.     freopen("input.txt", "r", stdin);
  24.     freopen("output.txt", "w", stdout);
  25.     int n, m;
  26.     cin >> n >> m;
  27.     vector<list<pair<int, unsigned long long> > > g(n);
  28.     for (int i = 0; i < m; i++) {
  29.         int x, y, z;
  30.         cin >> x >> y >> z;
  31.         g[x - 1].emplace_back(pair<int,unsigned long long>(y-1,z));
  32.         g[y - 1].emplace_back(pair<int,unsigned long long>(x-1,z));
  33.     }
  34.     priority_queue<pair<int, unsigned long long>, vector<pair<int, unsigned long long>>, comp> pq;
  35.     vector<unsigned long long> d(n, INF);
  36.     d[0] = 0;
  37.     vector<bool> u(n);
  38.     int v = 0;
  39.     pq.push(pair<int, unsigned long long>(0, 0));
  40.     //for (int i = 0; i < n; ++i) {
  41.     while(!pq.empty()){
  42.         v = pq.top().first;
  43.         pq.pop();
  44.         if (!u[v]) {
  45.             u[v] = true;
  46.             for_each(g[v].begin(), g[v].end(), [&u, &d, &v, &pq](pair<int, unsigned long long> &pair1) {
  47.                 int to = pair1.first;
  48.                 unsigned long long len = pair1.second;
  49.                 if (!u[to] && d[v] != INF && d[v] + len < d[to]) {
  50.                     d[to] = d[v] + len;
  51.                     pq.push(pair<int, unsigned long long>(to, d[to]));
  52.                 }
  53.             });
  54.         }
  55.     }
  56.     cout << d[n-1];
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement