1 条题解
-
0
C++ :
#include <bits/stdc++.h> using namespace std; const int N = 100010; int pre[N],k; struct node{ int from,to,next; }a[N*2]; bool f[N]; int n,ans = INT_MAX; //求每个结点所对应子树大小 int dfs(int x){ f[x] = true;//走过标记 int sum = 1;//存储该子树的大小 int res = 0;//最大的子树的大小 //x能去的点 for(int i = pre[x];i != 0;i = a[i].next){ //没走过 if(!f[a[i].to]){ int s = dfs(a[i].to);//子树的大小 res = max(res,s); sum += s; } } //除了当前子树以外,另外一棵子树大小 res = max(res,n - sum); ans = min(res,ans);//最大子树的最小值 return sum; } void add(int u,int v){ k++; a[k].from = u; a[k].to = v; a[k].next = pre[u]; pre[u] = k; } int main(){ cin>>n; int x,y; for(int i = 1;i <= n - 1;i++){ cin>>x>>y; add(x,y); add(y,x); } //求每个结点的子结点的数量 dfs(1); cout<<ans; }
- 1
信息
- ID
- 1076
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者