Submission #1360364

#TimeUsernameProblemLanguageResultExecution timeMemory
1360364lyra_g13Voting Cities (NOI22_votingcity)C++20
20 / 100
39 ms896 KiB
#include <bits/stdc++.h>
using ll = long long;
using namespace std;
int main() {
  std::ios_base::sync_with_stdio(false);
  std::cin.tie(nullptr);
  ll n, e, k;
  cin >> n >> e >> k;

  vector<ll> a(k);

  for (auto &i : a) {
    cin >> i;
  }

  vector<vector<pair<ll, ll>>> adj(n + 1);
  for (int i = 0; i < e; i++) {
    ll u, v, c;
    cin >> u >> v >> c;

    adj[u].push_back({v, c});
  }

  auto find = [&](ll u) -> ll {
    vector<ll> dist(n + 1, 1e18);
    dist[u] = 0;
    priority_queue<pair<ll, ll>> pq;
    pq.push({0, u});

    while (!pq.empty()) {
      auto [nd, u] = pq.top();
      pq.pop();

      nd = -nd;

      if (nd > dist[u])
        continue;
      for (auto [v, c] : adj[u]) {
        if (dist[v] > dist[u] + c) {
          dist[v] = dist[u] + c;
          pq.push({-dist[v], v});
        }
      }
    }

    ll ans = 1e18;
    for (int i = 0; i < k; i++) {
      ans = min(ans, dist[a[i]]);
    }
    if (ans == 1e18)
      return -1;
    return ans;
  };

  ll q;
  cin >> q;

  for (int i = 0; i < q; i++) {
    ll s;
    cin >> s;

    for (int j = 0; j < 5; j++) {
      ll u;
      cin >> u;
    }

    cout << find(s) << "\n";
  }
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...