이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "highway.h"
#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define x first
#define y second
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
vector<pii>g[90015];
vector<int>all[90015];
vector<int>qry;
ll n,m,mx,mn,a,b,fa[90015],dep[90015];
void bfs(int root){
for (int i=0;i<=n;i++){
fa[i]=0; dep[i]=0; mx=0;
all[i].clear();
}
queue<int>q; q.push(root);
dep[root]=1; mx=1;
all[1].push_back(root);
while (!q.empty()){
int p=q.front(); q.pop();
for (auto [i,idx]:g[p]){
if (!dep[i]){
dep[i]=dep[p]+1; fa[i]=idx; mx=max(mx,dep[i]);
all[dep[i]].push_back(i);
q.push(i);
}
}
}
}
int solve1(int root){
bfs(root);
int l=1,r=mx+1;
while (l<r){
int mid=(l+r)>>1;
for (int j=0;j<=mid;j++){
for (auto i:all[j])
qry[fa[i]]=1;
}
ll dis=ask(qry);
if (dis==b*(mn/a)) r=mid;
else l=mid+1;
for (int j=0;j<=mid;j++){
for (auto i:all[j])
qry[fa[i]]=0;
}
}
int p=l;
l=0,r=all[p].size();
while (l<r){
int mid=(l+r)>>1;
for (int j=l;j<=mid;j++)
qry[fa[all[p][j]]]=1;
ll dis=ask(qry);
for (int j=l;j<=mid;j++)
qry[fa[all[p][j]]]=0;
if (dis!=mn) r=mid;
else l=mid+1;
}
return all[p][l];
}
void find_pair(int N, std::vector<int> U, std::vector<int> V, int A, int B) {
n=N; m=U.size(); a=A; b=B;
for (int i=0;i<m;i++){
g[U[i]].push_back({V[i],i});
g[V[i]].push_back({U[i],i});
}
qry.resize(m,0);
mn=ask(qry);
ll root=0;
ll s=solve1(root),d=mn/A;
bfs(s);
ll p=d+1,l=0,r=all[p].size();
while (l<r){
ll mid=(l+r)>>1;
for (int j=l;j<=mid;j++)
qry[fa[all[p][j]]]=1;
ll dis=ask(qry);
for (int j=l;j<=mid;j++)
qry[fa[all[p][j]]]=0;
if (dis!=mn) r=mid;
else l=mid+1;
}
ll t=all[p][l];
answer(s,t);
}
/*
./rand
./highway
*/
# | 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... |