Advertisement
erek1e

IOI '11 P4 - Crocodile's Underground City (Standard I/O)

Jun 27th, 2023
976
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <queue>
  5.  
  6. using namespace std;
  7.  
  8. const int INF = 2e9;
  9.  
  10. int main() {
  11.     ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  12.     int n, m, k; cin >> n >> m >> k;
  13.     vector<vector<pair<int, int>>> g(n);
  14.     for (int i = 0; i < m; ++i) {
  15.         int u, v, l; cin >> u >> v >> l;
  16.         g[u].emplace_back(v, l);
  17.         g[v].emplace_back(u, l);
  18.     }
  19.  
  20.     vector<int> dist(n, INF); // worst case
  21.     priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
  22.     vector<bool> haveOption(n);
  23.     for (int i = 0; i < k; ++i) {
  24.         int x; cin >> x;
  25.         dist[x] = 0;
  26.         pq.emplace(0, x);
  27.     }
  28.     while (!pq.empty()) {
  29.         auto [d, v] = pq.top();
  30.         pq.pop();
  31.         if (dist[v] && dist[v] != INF) continue;
  32.         if (d && !haveOption[v]) {
  33.             haveOption[v] = true;
  34.             continue;
  35.         }
  36.         dist[v] = d;
  37.         if (v == 0) break;
  38.         for (auto [u, l] : g[v]) {
  39.             if (dist[u] == INF) pq.emplace(d+l, u);
  40.         }
  41.     }
  42.     cout << dist[0] << endl;
  43.     return 0;
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement