이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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;
int dis;
vector<int> chg;
vector<int> get(int rt){
queue<int> q;
vector<int> x;
for(int i=0;i<n;i++){
if(v[i].deg==1 && i!=rt){
q.push(i);
}
}
while(q.size()){
auto h=q.front();
q.pop();
x.push_back(h);
for(auto y:v[h].ch){
v[y.fs].deg--;
if((v[y.fs].deg==1) && y.fs!=rt){
v[y.fs].deg=-1;
q.push(y.fs);
}
}
}
if(rt!=-1){
x.push_back(rt);
}
for(int i=0;i<n;i++){
v[i].deg=v[i].ndeg;
}
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);
}
# | 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... |