Submission #878152

#TimeUsernameProblemLanguageResultExecution timeMemory
878152The_SamuraiEvacuation plan (IZhO18_plan)C++17
54 / 100
4051 ms28124 KiB
#include "bits/stdc++.h" using namespace std; using ll = long long; const int inf = 1e9; void solve() { int n, m, k, q; cin >> n >> m; vector<vector<pair<int, int>>> g(n + 1); for (int i = 0; i < m; i++) { int u, v, w; cin >> u >> v >> w; g[u].emplace_back(v, w); g[v].emplace_back(u, w); } cin >> k; vector<int> dist(n + 1, inf), roots(k); priority_queue<pair<int, int>> pq; for (int i = 0; i < k; i++) { int root; cin >> root; pq.emplace(0, root); dist[root] = 0; } vector<bool> vis(n + 1); while (!pq.empty()) { auto [d, u] = pq.top(); pq.pop(); d = -d; if (vis[u]) continue; vis[u] = true; for (auto [v, w]: g[u]) { if (dist[v] <= d + w) continue; dist[v] = d + w; pq.emplace(-dist[v], v); } } for (int i = 1; i <= n; i++) sort(g[i].begin(), g[i].end()); cin >> q; while (q--) { int s, t; cin >> s >> t; int i = lower_bound(g[s].begin(), g[s].end(), make_pair(t, 0)) - g[s].begin(); if (i < g[s].size() and g[s][i].first == t) { cout << min(dist[s], dist[t]) << '\n'; continue; } vector<int> ans(n + 1); vector<bool> vis(n + 1); ans[s] = dist[s]; priority_queue<pair<int, int>> pq; pq.emplace(ans[s], s); while (!pq.empty()) { auto [d, u] = pq.top(); pq.pop(); if (vis[u]) continue; vis[u] = true; for (auto [v, w]: g[u]) { if (ans[v] > min(ans[u], dist[v])) continue; ans[v] = min(ans[u], dist[v]); pq.emplace(ans[v], v); } } cout << ans[t] << '\n'; } } int main() { cin.tie(0)->sync_with_stdio(false); #ifdef sunnatov freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif int queries = 1; // cin >> queries; for (int test_case = 1; test_case <= queries; test_case++) { #ifdef sunnatov cout << "Test case: " << test_case << endl; #endif solve(); cout << '\n'; } }

Compilation message (stderr)

plan.cpp: In function 'void solve()':
plan.cpp:44:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |         if (i < g[s].size() and g[s][i].first == t) {
      |             ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...