1 solutions
-
0
#include<bits/stdc++.h> using namespace std; const int N=1e5+10; vector<int> g[N]; int ans=N; int n; int dfs(int u,int fa) //返回以u为根的节点数目 { int s=1; int maxv=0; //将u删除以后,连通块中最多的点的数目 for(auto j:g[u]) { if(j==fa) continue; int c=dfs(j,u); s+=c; maxv=max(maxv,c); //最大值 } maxv=max(maxv,n-s); ans=min(ans,maxv); return s; } int main() { cin>>n; for(int i=1;i<n;i++) { int a,b; cin>>a>>b; g[a].push_back(b); g[b].push_back(a); } dfs(1,-1); cout<<ans; return 0; }
- 1
Information
- ID
- 373
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 3
- Tags
- # Submissions
- 27
- Accepted
- 9
- Uploaded By