Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- const int INF = 1000000000;
- int main() {
- int n;
- std::cin >> n;
- std::vector<int> weigths(n);
- for (int i = 0; i < n; i++) {
- std::cin >> weigths[i];
- }
- std::vector<std::vector<std::pair<int, int>>> g(n);
- int m;
- std::cin >> m;
- for (int i = 0; i < m; i++) {
- int a, b;
- std::cin >> a >> b;
- a--;
- b--;
- g[a].push_back({b, weigths[b]});
- g[b].push_back({a, weigths[a]});
- }
- int s = 0;
- std::vector<int> d(n, INF), p(n);
- d[s] = 0;
- std::vector<char> u(n);
- for (int i = 0; i < n; ++i) {
- int v = -1;
- for (int j = 0; j < n; ++j)
- if (!u[j] && (v == -1 || d[j] < d[v]))
- v = j;
- if (d[v] == INF)
- break;
- u[v] = true;
- for (size_t j = 0; j < g[v].size(); ++j) {
- int to = g[v][j].first,
- len = g[v][j].second;
- if (d[v] + len < d[to]) {
- d[to] = d[v] + len;
- p[to] = v;
- }
- }
- }
- if (d[n - 1] == INF) {
- std::cout << -1;
- } else {
- std::cout << d[n - 1];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement