graph g; priority_queue f(ll i,ll p){ priority_queue q; rep[g.edge[i]](j,g.es[i]){ if(j!=p){ auto r=f(j,i); if(r.size()>q.size()){ swap(r,q); } while(!r.empty()){ ll x=r.top(); r.pop(); q.push(x); } } } if(q.size()==0){ q.push(1); } else if(q.size()==1){ ll x=q.top(); q.pop(); q.push(x+1); } else{ ll x=q.top(); q.pop(); ll y=q.top(); q.pop(); q.push(x+y+1); } return q; } { ll@n; int a[n],b[]; rd((a,b)(n-1)); g.setEdge(n+1,n-1,a,b); auto r=f(1,1); wt(r.top()); }