1、B站视频链接:E32 树形DP 树的重心_哔哩哔哩_bilibili
#include <bits/stdc++.h>
using namespace std;
const int N=100010;
int n,a,b;
vector<int> e[N];
int size[N],pos,ans=1e9;
void dfs(int x,int fa){
size[x]=1;
int maxn=0;
for(auto y:e[x]){
if(y==fa)continue;//回溯时判重
dfs(y,x);
size[x]+=size[y];
maxn=max(maxn,size[y]);
}
maxn=max(maxn,n-size[x]);
if(maxn<ans)ans=maxn,pos=x;
}
int main(){
scanf("%d",&n);
for(int i=1;i<n;i++){
scanf("%d%d",&a,&b);
e[a].push_back(b);
e[b].push_back(a);
}
dfs(1,0);
printf("%d\n",ans);
return 0;
}