- 题目详情
- 代码打卡
题目详情 代码打卡
#include#include using namespace std; const int N =1e5+10; int h[N],e[2*N],ne[2*N],idx; bool st[N]; int n,ans=N; void add(int a,int b) { e[idx]=b,ne[idx]=h[a],h[a]=idx++; } int dfs(int u) { st[u]=true; int sum=0,size=0; //size表示当前子树最大数量 for(int i=h[u];i!=-1;i=ne[i]) // 遍历每一个可以到的点 { int j=e[i]; if(st[j]) continue; int s=dfs(j); //每一个子树的大小 size=max(size,s); sum +=s; } size=max(size,n-sum-1); //出了当前这个节点所有点的数量 ans=min(ans,size); return sum+1; //sum要加一的原因是要计算当前这个点 } int main() { 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 << ans; return 0; }



