#include <bits/stdc++.h>
#include "highway.h"
using namespace std;
using ll = long long;
using pii = pair<int, int>;
vector<vector<pii>> adj;
vector<int> endp;
vector<int> edge;
int t;
int last;
void dfs(int n, int p=-1) {
for (auto x : adj[n]) {
if (x.second == p) continue;
endp[t] = x.second;
edge[x.first] = t++;
dfs(x.second, n);
}
}
void find_pair(int n, vector<int> U, vector<int> V, int A, int B) {
int m = U.size();
vector<int> query(m, 0);
ll w = ask(query);
adj.resize(n);
for (int i=0; i<m; i++) {
int a = U[i];
int b = V[i];
adj[a].push_back({i, b});
adj[b].push_back({i, a});
}
edge.resize(n);
endp.resize(n);
t=0;
dfs(0);
int l = 0, r = t-1;
int ans=-1;
while (l <= r) {
int mm = (l+r)/2;
for (int i=0; i<m; i++) {
query[i] = (edge[i] >= mm);
}
ll w2 = ask(query);
if (w2 != w) {
l = mm+1;
ans = mm;
}
else {
r = mm-1;
}
}
answer(0, endp[ans]);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |