Submission #1279393

#TimeUsernameProblemLanguageResultExecution timeMemory
1279393luuthanhdatbienhoak66Papričice (COCI20_papricice)C++20
110 / 110
183 ms20772 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...