#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>usingnamespace std;constint N =1e5+10;int n;int h[N], e[N *2], ne[N *2], idx;bool st[N];int cnt = N;//最大值的最小值//添加一条a-->b的边voidadd(int a,int b){
e[idx]= b;
ne[idx]= h[a];
h[a]= idx++;}//返回以u为根节点子树的大小(包括自己)intdfs(int u){
st[u]=true;//表示点u已经被遍历过了int s =1;//根节点的数量int res =0;//剩余连通块中点数最大值for(int i = h[u]; i !=-1; i = ne[i]){
int j = e[i];if(!st[j]){
int t =dfs(j);
res =max(res, t);
s += t;//加上自己的子树}}
res =max(res, n - s);
cnt =min(res, cnt);return s;}intmain(){
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);memset(h,-1,sizeof h);
cin >> n;for(int i =1; i < n; i++){
int a, b;
cin >> a >> b;add(a, b),add(b, a);}dfs(1);
cout << cnt << endl;return0;}