# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
713900 | alvingogo | 모임들 (IOI18_meetings) | C++14 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "highway.h"
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#define AquA cin.tie(0);ios_base::sync_with_stdio(0);
#define fs first
#define sc second
#define p_q priority_queue
using namespace std;
struct no{
vector<pair<int,int> > ch;
int deg=0;
int ndeg=0;
};
vector<no> v;
int n;
int a,b;
long long dis;
vector<int> chg;
vector<int> get(int rt){
vector<int> x;
vector<int> vis(n);
function<void(int)> dfs=[&](int r){
vis[r]=1;
x.push_back(r);
for(auto h:v[r].ch){
if(!vis[h.fs]){
dfs(h.fs);
}
}
};
dfs(rt);
reverse(x.begin(),x.end());
return x;
}
int find_right(int rt){
auto x=get(rt);
int l=0,r=n-1;
while(r>l){
int mid=(l+r)/2;
for(int i=0;i<=mid;i++){
for(auto z:v[x[i]].ch){
chg[z.sc]=1;
}
}
if(ask(chg)!=dis){
r=mid;
}
else{
l=mid+1;
}
for(int i=0;i<=mid;i++){
for(auto z:v[x[i]].ch){
chg[z.sc]=0;
}
}
}
return x[l];
}
void find_pair(int N, vector<int> U, vector<int> V, int A, int B) {
a=A;
b=B;
n=N;
v.resize(n);
int m=U.size();
for(int i=0;i<m;i++){
v[U[i]].ch.push_back({V[i],i});
v[V[i]].ch.push_back({U[i],i});
v[U[i]].deg++;
v[V[i]].deg++;
}
for(int i=0;i<n;i++){
v[i].ndeg=v[i].deg;
}
chg.resize(m,0);
dis=ask(chg);
int u=find_right(0);
int y=find_right(u);
answer(u,y);
}