https://codeforces.com/problemset/problem/2063/C

#include<bits/stdc++.h>
using namespace std;

#define endl '\n'
using ll = long long;
using pii = pair<int, int>;
const double PI = acos(-1);
const int N =2e5+10;
const int mod = 1e9 + 7;
vector<int> tu[N];
bool cmp(pii x,pii y){
	return x.first>y.first;
}
void solve(){
	int n;cin>>n;
	for(int i=1;i<=n;i++)
		tu[i].clear();
	vector<pii> g;
	vector<int> du(n+1);
	for(int i=1;i<n;i++){
		int u,v;cin>>u>>v;
		tu[u].push_back(v);
		tu[v].push_back(u);
		g.push_back({u,v});
		du[u]++;
		du[v]++;
	}
	if(n==2){
		cout<<0<<endl;
		return;
	}
	int ma=-1;
	for(int i=1;i<=n;i++){
		ma=max(ma,du[i]);
	}
	vector<int> s;
	for(int i=1;i<=n;i++){
		if(du[i]==ma){
			s.push_back(i);
		}
	}
	int ans=0;
	if(s.size()==3){
		for(int i=0;i<2;i++){
			for(auto u:tu[s[i]]){
				du[u]--;
			}
			int nowma=-1;
			for(int i=1;i<=n;i++){
				if(i==s[i]) continue;
				nowma=max(nowma,du[i]);
			}
			ans=max(ans,1+ma-1+nowma-1);
		}
		
	}
	else{
		for(auto u:tu[s[0]]){
			du[u]--;
		}
		int nowma=-1;
		for(int i=1;i<=n;i++){
			if(i==s[0]) continue;
			nowma=max(nowma,du[i]);
		}
		ans=1+ma-1+nowma-1;
	
	}
		
	cout<<ans<<endl;
}
int main() {
	
	ios::sync_with_stdio(false);
	cin.tie(nullptr), cout.tie(nullptr);
	
	int T = 1;
	cin>>T;
	while (T--) {
		solve();
	}
	
	return 0;
}

分删除的两个点相邻,不相邻。第一个点选择是随机的,最大度数的点的个数为3时对第一个点的选择有要求,个数为其他时,第一个点随便选都可以