#include #include #include #include #include #include #include using namespace std; int main(){ int N; cin>>N; vector> G(N); for(int i=0;i>A>>B; G[A-1].push_back(B-1); G[B-1].push_back(A-1); } deque> dq; dq.push_back(make_pair(0,0)); vector depth(N,-1); while(!dq.empty()){ pair q=dq.back();dq.pop_back(); depth[q.first]=q.second; for(int to:G[q.first]){ if(depth[to]==-1){ dq.push_back(make_pair(to,q.second+1)); } } } // cerr<<"depth"< parent(N); parent[0]=-1; vector> children(N); priority_queue> pq; for(int i=0;i num(N,1); while(!pq.empty()){ pair q=pq.top(); pq.pop(); int point=q.second; int par=parent[point]; if(par==-1){ break; } if(num[par]!=1){ continue; } if(children[par].size()<=2){ //cerr<<"par:"<> cnt; for(int i:children[par]){ cnt.push_back(make_pair(num[i],i)); } sort(cnt.rbegin(),cnt.rend()); num[par]+=cnt[0].first+cnt[1].first; if(parent[par]!=-1){ for(int i=2;i