Advertisement
DimaT1

fint

Feb 8th, 2018
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. const int INF = 1000000000;
  5.  
  6. int main() {
  7.     int n;
  8.     std::cin >> n;
  9.     std::vector<int> weigths(n);
  10.     for (int i = 0; i < n; i++) {
  11.         std::cin >> weigths[i];
  12.     }
  13.     std::vector<std::vector<std::pair<int, int>>> g(n);
  14.  
  15.     int m;
  16.     std::cin >> m;
  17.  
  18.     for (int i = 0; i < m; i++) {
  19.         int a, b;
  20.         std::cin >> a >> b;
  21.         a--;
  22.         b--;
  23.         g[a].push_back({b, weigths[b]});
  24.         g[b].push_back({a, weigths[a]});
  25.     }
  26.  
  27.     int s = 0;
  28.  
  29.     std::vector<int> d(n, INF), p(n);
  30.     d[s] = 0;
  31.     std::vector<char> u(n);
  32.     for (int i = 0; i < n; ++i) {
  33.         int v = -1;
  34.         for (int j = 0; j < n; ++j)
  35.             if (!u[j] && (v == -1 || d[j] < d[v]))
  36.                 v = j;
  37.         if (d[v] == INF)
  38.             break;
  39.         u[v] = true;
  40.  
  41.         for (size_t j = 0; j < g[v].size(); ++j) {
  42.             int to = g[v][j].first,
  43.                     len = g[v][j].second;
  44.             if (d[v] + len < d[to]) {
  45.                 d[to] = d[v] + len;
  46.                 p[to] = v;
  47.             }
  48.         }
  49.     }
  50.  
  51.     if (d[n - 1] == INF) {
  52.         std::cout << -1;
  53.     } else {
  54.         std::cout << d[n - 1];
  55.     }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement