이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "highway.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
void find_pair(int32_t N, vector<int32_t> U, vector<int32_t> V, int32_t A, int32_t B) {
vector<vector<int>> g(N);
for (int i=0; i<N-1; ++i) g[U[i]].push_back(i), g[V[i]].push_back(i);
vector<pair<int, int>> order;
vector<int32_t> a(N-1);
int len=ask(a)/A;
auto dfs=[&](auto &&self, int u, int p) -> void {
for (int i:g[u]) if (i!=p){
int v=u^U[i]^V[i];
order.emplace_back(i, v);
self(self, v, i);
}
};
int S, T;
{
order.clear();
dfs(dfs, 0, -1);
int l=0, r=N-1;
while (l<=r){
int mid=(l+r)>>1;
for (int i=0; i<=mid; ++i) a[order[i].first]=1;
if (ask(a)==len*B) r=mid-1;
else l=mid+1;
for (int i=0; i<=mid; ++i) a[order[i].first]=0;
}
S=order[l].second;
}
{
order.clear();
dfs(dfs, S, -1);
int l=0, r=N-1;
while (l<=r){
int mid=(l+r)>>1;
for (int i=0; i<=mid; ++i) a[order[i].first]=1;
if (ask(a)==len*B) r=mid-1;
else l=mid+1;
for (int i=0; i<=mid; ++i) a[order[i].first]=0;
}
T=order[l].second;
}
answer(S, T);
}
# | 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... |