#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<ll,ll>
#define F first
#define S second
const ll N=2e5+5;
ll n,sz[N],ans=2e9;
vector<ll> adj[N];
set<ll> undone,done;
void dfs_0(ll v,ll cha)
{
sz[v]=1;
for(ll x:adj[v])
{
if(x!=cha)
{
dfs_0(x,v);
sz[v]+=sz[x];
}
}
}
ll cmp(ll x,ll a)
{
ll b=n-x-a;
if(a<b) a^=b,b^=a,a^=b;
if(x>a) return x-b;
if(x<b) return a-x;
return a-b;
}
void dfs(ll v,ll cha)
{
auto it=done.lower_bound((n-sz[v])/2);
if(it!=done.end()) ans=min(ans,cmp(sz[v],*it));
if(it!=done.begin()) ans=min(ans,cmp(sz[v],*prev(it)));
it=undone.lower_bound((n-sz[v])/2+sz[v]);
if(it!=undone.end()) ans=min(ans,cmp(sz[v],*it-sz[v]));
if(it!=undone.begin()) ans=min(ans,cmp(sz[v],*prev(it)-sz[v]));
undone.insert(sz[v]);
for(ll x:adj[v]) if(x!=cha) dfs(x,v);
undone.erase(sz[v]);
done.insert(sz[v]);
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(ll i=1,u,v; i<n; i++)
{
cin>>u>>v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs_0(1,0);
dfs(1,0);
cout<<ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |