1 条题解
-
3
#include <bits/stdc++.h> #define ll long long using namespace std; const int N=200005; int n,m,k,s,t,sz[N],ans=0x3f3f3f3f; multiset<int> s1,s2; multiset<int>::iterator it; vector<int> e[N]; void check(int a,int b){ int c=n-a-b; int p=max(max(a,b),c); int q=min(min(a,b),c); ans=min(ans,p-q); } void dfs(int u,int fa){ sz[u]=1; for (int &v:e[u]){ if (v==fa) continue; dfs(v,u); sz[u]+=sz[v]; } } void dfs1(int u,int fa){ it=s1.lower_bound((n-sz[u])/2); if (it!=s1.end()) check(sz[u],*it); if (it!=s1.begin()) { --it; check(sz[u],*it); } it=s2.lower_bound((n+sz[u])/2); if (it!=s2.end()) check(sz[u],*it-sz[u]); if (it!=s2.end()) { --it; check(sz[u],*it-sz[u]); } s2.insert(sz[u]); for (int &v:e[u]){ if (v==fa) continue; dfs1(v,u); } s2.erase(s2.find(sz[u])); s1.insert(sz[u]); } int main(){ freopen("in.txt","r",stdin); cin>>n; for (int i=1;i<n;++i){ cin>>s>>t; e[s].push_back(t); e[t].push_back(s); } dfs(1,0); dfs1(1,0); cout<<ans; }
- 1
信息
- ID
- 342
- 时间
- 1000ms
- 内存
- 500MiB
- 难度
- 5
- 标签
- 递交数
- 60
- 已通过
- 23
- 上传者