이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "grader.h"
using namespace std;
vector<int>st_size;
vector<vector<int>>graph;
vector<bool>active;
int st(int node, int parent){
st_size[node]=1;
for(int &child:graph[node]){
if(child==parent || !active[child])continue;
st_size[node]+=st(child,node);
}
return st_size[node];
}
int find_centroid(int node, int parent, int size){
for(int child:graph[node]){
if(child==parent || !active[child])continue;
if(st_size[child]>=size/2)return(find_centroid(child,node,size));
}
return node;
}
vector<int>t;
vector<int> build_the_tree(int node, int parent){
t.push_back(node);
for(int child:graph[node]){
if(child==parent || !active[child])continue;
build_the_tree(child,node);
}
}
int findEgg (int N, vector < pair < int, int > > bridges)
{
st_size.resize(N);
graph.resize(N);
active.resize(N,true);
for(int i=0;i<N-1;i++){
graph[bridges[i].first].push_back(bridges[i].second);
graph[bridges[i].second].push_back(bridges[i].first);
}
int total=N;
int parent=0;
while(total>1){
t.clear();
int centroid=find_centroid(parent,-1,st(parent,-1));
active[centroid]=0;
build_the_tree(parent,-1);
if(query(t)){
active.resize(N,0);
for(int i:t)active[i]=true;
total=st_size[parent]-st_size[centroid];
}
else {
for(int i:t)active[i]=false;
active[centroid]=true;
total=st_size[centroid];
parent=centroid;
}
}
return parent;
}
컴파일 시 표준 에러 (stderr) 메시지
eastereggs.cpp: In function 'std::vector<int> build_the_tree(int, int)':
eastereggs.cpp:33:1: warning: no return statement in function returning non-void [-Wreturn-type]
33 | }
| ^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |