思路:删掉度最大的,减掉与这个点相连的边,再找出第二大的。
若不对,求 hack。若对,求调。
救救吃了 7 发罚时的孩子吧 QWQ。
#include<bits/stdc++.h>
#define int long long
#define il inline
#define pii pair<int,int>
#define mk make_pair
#define fir first
#define sec second
#define pb emplace_back
#define mod 1000000007
#define put putchar
using namespace std;
il int rd(){
int jya=0,tl=1;char jyt=getchar();
while(!isdigit(jyt)){if(jyt=='-')tl=-1;jyt=getchar();}
while(isdigit(jyt)){jya=(jya<<1)+(jya<<3)+(jyt-'0');jyt=getchar();}
return jya*tl;
}
il void wr(int jjy){
if(jjy<0)putchar('-'),jjy=-jjy;
if(jjy>9)wr(jjy/10);
putchar(jjy%10+48);
}
const int JYAAKIOI=1e18,N=5e5+86,M=2e5+86;
int T,n,ans,d[N],u[N],v[N],id,id2;
vector<int>g[N];
signed main(){
//freopen("csnm.in","r",stdin);
//freopen("csnm.out","w",stdout);
T=rd();
while(T--){
n=rd();
ans=1;
for(int i=1;i<=n;++i)d[i]=0;
for(int i=1;i<n;++i){
u[i]=rd(),v[i]=rd();
g[u[i]].pb(v[i]);
g[v[i]].pb(u[i]);
++d[u[i]],++d[v[i]];
}
id=0;
for(int i=1;i<n;++i)if(d[id]<d[i])id=i;
ans+=d[id]-1;
for(auto v:g[id])--d[v];
d[id]=0;
id2=0;
for(int i=1;i<n;++i)if(d[id2]<d[i]&&i!=id)id2=i;
ans+=d[id2]-1;
wr(ans),put('\n');
}
return 0;
}