#include "highway.h"
#include <bits/stdc++.h>
using namespace std;
#define all(v) v.begin(), v.end()
#define ar array
void find_pair(int n, std::vector<int> u, std::vector<int> v, int a, int b) {
    vector<ar<int, 2>> g[n];
    int m = u.size();
    for(int i= 0;i < m;i++){
        g[u[i]].push_back({v[i], i});
        g[v[i]].push_back({u[i], i});
    }
    vector<int> Q(m, 0);
    int w = ask(Q);
    ar<int, 2> e;
    int ee;
    {
        int lo = -1, hi = m;
        while(hi - lo >1){
            int mid = (lo + hi) / 2;
            for(int i = 0;i < m;i++)Q[i] = i <= mid;
            if(ask(Q) != w)hi = mid;
            else lo = mid;
        }
        ee = hi;
        e = {u[hi], v[hi]};
    };
    int dst[n][2];
    memset(dst, -1, sizeof dst);
    for(int j = 0;j < 2;j++){
        queue<int> q;
        dst[e[j]][j] = 0;
        q.push(e[j]);
        while(q.size()){
            int x = q.front();
            q.pop();
            for(auto [u, i]: g[x]){
                if(dst[u][j] == -1){
                    dst[u][j] = dst[x][j] + 1;
                    q.push(u);
                }
            }
        }
    }
    ar<int, 2> ans;
    for(int j = 0;j < 2;j++){
        int t = 0;
        int A[m];
        int V[m];
        int d[n];
        memset(d, -1, sizeof d);
        memset(A, -1, sizeof A);
        memset(V, -1, sizeof V);
        d[e[j]] = 0;
        queue<int> q;
        q.push(e[j]);
        while(q.size()){
            int x = q.front();
            q.pop();
            for(auto [u, i]: g[x]){
                if(dst[u][j] < dst[u][j ^ 1]){
                    if(d[u] == -1){
                        d[u] = d[x] +1 ;
                        q.push(u);
                        V[t] = u;
                        A[i] = t++;
                    }else if(d[u] == d[x] + 1)A[i] = n;
                }else if(i != ee)A[i] = n;
            }
        }
       // cout<<e[j]<<": ";
        //for(int i = 0;i < m;i++)cout<<A[i]<<" ";
        //cout<<'\n';
        int lo = -1, hi = m;
        while(hi - lo > 1){
            int mid = (lo + hi) / 2;
            for(int i = 0;i < m;i++)Q[i] = A[i] >= mid;
            if(ask(Q) != w)lo = mid;
            else hi = mid;
        }
        if(lo == -1)ans[j] = e[j];
        else ans[j] = V[lo];
    }
   // cout<<ans[0]<<" "<<ans[1]<<endl;
    answer(ans[0], ans[1]);
}
| # | 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... |