#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>sett[N+2];
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 dfs(int u,int p){
sub[u]=1;
for(auto&v:ke[u]){
if (v==p) continue;
dfs(v,u);
sub[u]+=sub[v];
if (sett[u].size()<sett[v].size())
swap(sett[u],sett[v]);
for(auto&sz:sett[v]) {
pair<int,int> pont=binary(sett[u],(n-sz)/2);
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);
}
}
for(auto&sz:sett[v]) sett[u].insert(sz);
}
if (sett[u].size()){
pair<int,int>pont=binary(sett[u],sub[u]/2);
if (pont.first!=-1) {
int sz=sub[u]-pont.first;
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 sz=sub[u]-pont.second;
int add_more=max({sz,n-sz-pont.second,pont.second})-min({sz,n-sz-pont.second,pont.second});
ans=min(ans,add_more);
}
}
sett[u].insert(sub[u]);
return;
}
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);
}
dfs(1,0);
cout<<ans;
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
papricice.cpp: In function 'int main()':
papricice.cpp:78:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
78 | freopen(task".inp","r",stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
papricice.cpp:79:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
79 | 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... |