codevs 3639樹的重心
阿新 • • 發佈:2018-11-14
板子題:
#include<bits/stdc++.h> using namespace std; const int maxn=1e5+5; int n; vector<int>E[maxn],ans; int sz[maxn],minsz=maxn; void dfs(int x,int fa) { sz[x]=1; int maxchild=0; for(int i=0;i<E[x].size();i++) { int it=E[x][i]; if(it!=fa) { dfs(it,x); sz[x]+=sz[it]; maxchild=max(maxchild,sz[it]); } } int temp=max(maxchild,n-sz[x]); if(temp<minsz) { ans.clear(); ans.push_back(x); minsz=temp; } else if(temp==minsz) { ans.push_back(x); } } int main() { ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>n; for(int i=1;i<n;i++) { int x,y;cin>>x>>y; E[x].push_back(y); E[y].push_back(x); } dfs(1,0); sort(ans.begin(),ans.end()); cout<<minsz<<" "<<ans.size()<<"\n"; for(int i=0;i<ans.size();i++) cout<<ans[i]<<" "; return 0; }