#include "highway.h"
#include <bits/stdc++.h>
using namespace std;
vector<int>edgeorder;
int m;
void dfs(int st, vector<array<int,2>>g[], int p[], int par){
p[st]=par;
for(array<int,2>e:g[st]){
if(e[0]==par)
continue;
edgeorder.push_back(e[1]);
dfs(e[0],g,p,st);
}
}
int check(int x){
//x is included
vector<int>w(m);
for(int i = 0;i<=x;i++){
w[edgeorder[i]]=1;
}
return ask(w);
}
void find_pair(int n, vector<int> U, vector<int> V, int a, int b) {
vector<array<int,2>>g[n];
m = U.size();
assert(m==n-1);
for(int i = 0;i<m;i++){
g[U[i]].push_back({V[i],i});
g[V[i]].push_back({U[i],i});
}
//assuming s is 0
//finding other
edgeorder.clear();
int p[n];
dfs(0,g,p,-1);
int lo = 0;
int hi = edgeorder.size()-1;
vector<int>w(m);
int bas = ask(w);
int ecn = bas/a;
int target = ecn*b;
while(lo<hi){
int mid = (lo+hi)/2;
if(check(mid)<target){
lo=mid+1;
}
else{
hi=mid;
}
}
lo=edgeorder[lo];
if(U[lo]==p[V[lo]]){
answer(0,V[lo]);
}
else{
answer(0,U[lo]);
}
}
# | 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... |