Submission #1238247

#TimeUsernameProblemLanguageResultExecution timeMemory
1238247TimoshHighway Tolls (IOI18_highway)C++20
46 / 100
102 ms9520 KiB
#include "bits/stdc++.h" #include "highway.h" using namespace std; void find_pair(int N, std::vector<int> U, std::vector<int> V, int A, int B) { int M = U.size(); vector<int> d(N), w(M); vector<int> p(M + 1); iota(p.begin(), p.end(), 0ll); int D = ask(w); vector<vector<int>> g(N); for (int i = 0; i < M; i++) { g[U[i]].push_back(V[i]); g[V[i]].push_back(U[i]); } auto bfs = [&](int node) -> void { queue<int> q; q.push(node); d[node] = 0; vector<int> vis(N); vis[node] = 1; while (!q.empty()) { int cur = q.front(); q.pop(); for (auto &x : g[cur]) { if (vis[x]) continue; vis[x] = 1; d[x] = d[cur] + 1; q.push(x); } } }; bfs(0); sort(p.begin(), p.end(), [&](int &i, int &j) { return max(d[U[i]], d[V[i]]) < max(d[U[j]], d[V[j]]); }); int a = 0; int l = 0, r = M - 1; while (l <= r) { int m = (l + r) / 2; for (int i = 0; i < M; i++) w[p[i]] = (i >= m); int x = ask(w); if (x == D) r = m - 1; else l = m + 1, a = p[m]; } int b = (d[V[a]] > d[U[a]] ? V[a] : U[a]); bfs(b); sort(p.begin(), p.end(), [&](int &i, int &j) { return max(d[U[i]], d[V[i]]) < max(d[U[j]], d[V[j]]); }); a = l = 0, r = M - 1; while (l <= r) { int m = (l + r) / 2; for (int i = 0; i < M; i++) w[p[i]] = (i >= m); int x = ask(w); if (x == D) r = m - 1; else l = m + 1, a = p[m]; } int c = (d[V[a]] > d[U[a]] ? V[a] : U[a]); answer(c, b); }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...