#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);
while (!q.empty())
{
int cur = q.front();
q.pop();
if (vis[cur])
continue;
vis[cur] = 1;
for (auto &x : g[cur])
{
if (vis[x])
continue;
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]);
a = l = 0, r = M - 1;
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]]); });
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 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... |