#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=(int)2e5;
vector<int>ke[N+2];
int sub[N+2],n,ans=(int)1e9+7;
bool ban[N+2]={};
int minimize(int &x,int y){
if (x>y) x=y,true;
return false;
}
void add_canh(int u,int v){
ke[u].push_back(v) , ke[v].push_back(u);
return;
}
set<int>A,B;
pair<int,int> binary(set<int>&sett,int x){
pair<int,int>ans={-1,-1};
auto it=sett.lower_bound(x);
if (it!=sett.end()) ans.first=*it;
if (it!=sett.begin()){
--it;
ans.second=*it;
}
return ans;
}
void pre_dfs(int u,int p){
sub[u]=1;
for(auto&v:ke[u]){
if (v==p) continue;
pre_dfs(v,u) , sub[u]+=sub[v];
}
return;
}
void dfs(int u,int p){
if (A.size()){
pair<int,int> pont=binary(A,(n+sub[u])/2);
if (pont.first!=-1) {
int sz=pont.first-sub[u];
int add_more=max({sz,n-sz-sub[u],sub[u]})-min({sz,n-sz-sub[u],sub[u]});
ans=min(ans,add_more);
}
if (pont.second!=-1){
int sz=pont.second-sub[u];
int add_more=max({sz,n-sz-sub[u],sub[u]})-min({sz,n-sz-sub[u],sub[u]});
ans=min(ans,add_more);
}
}
if (B.size()){
pair<int,int> pont=binary(B,(n-sub[u])/2);
int sz=sub[u];
if (pont.first!=-1) {
int add_more=max({sz,n-sz-pont.first,pont.first})-min({sz,n-sz-pont.first,pont.first});
ans=min(ans,add_more);
}
if (pont.second!=-1){
int add_more=max({sz,n-sz-pont.second,pont.second})-min({sz,n-sz-pont.second,pont.second});
ans=min(ans,add_more);
}
}
A.insert(sub[u]);
for(auto&v:ke[u]){
if (v==p) continue;
dfs(v,u);
}
A.erase(sub[u]) , B.insert(sub[u]);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0) ; cout.tie(0);
#define task "main"
if (fopen(task".inp","r")){
freopen(task".inp","r",stdin);
freopen(task".out","w",stdout);
}
cin>>n;
for(int i=1;i<n;++i){
int u,v; cin>>u>>v;
add_canh(u,v);
}
pre_dfs(1,0);
dfs(1,0);
cout<<ans;
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
papricice.cpp: In function 'int main()':
papricice.cpp:83:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
83 | freopen(task".inp","r",stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
papricice.cpp:84:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
84 | freopen(task".out","w",stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |