- 使用全局变量得方法。 
 - 记得递归find方法。 
 - 人头从1重新开始编号,所以需要map。 
 
 #include<bits/stdc++.h>
using namespace std;
const int MAX_N = 2e5 + 5;
int par[MAX_N],  cnt[MAX_N];
unordered_map<int,int> umap;
void init(int n){
    for(int i = 0; i < n;i++){
        par[i] = i;//各自
        cnt[i] = 1;//计数,
    }
}
int find(int x){
   if(par[x] == x)
        return x;
    else
        return par[x] = find(par[x]);
}
void Union(int x, int y){
    if(find(x)==find(y))
        return;// 统一交给y去处理
    cnt[par[y]] += cnt[par[x]];
    par[par[x]] = par[y];
}
int main(){
    int T,n;
    cin >> T;
    while(T--){
        int n;
        cin>>n;
        init(2*n+5);
        umap.clear();
        int cntv = 0;
        int x,y;
        for(int i = 0; i<n;i++){
            cin>>x>>y;
            if(umap.find(x)==umap.end()){
                ++cntv;//通过这种方法,人头就可以从1开始算了
                umap[x] = cntv;//在记录人头得ID.
            }
            if(umap.find(y)==umap.end()){
                ++cntv;
                umap[y] = cntv;//在记录人头得ID.
            }
            Union(umap[x],umap[y]);
        }
        int result = 0;
        for(int i = 0; i<= cntv;i++){//一定要从0开始,到当前人头,其实0不影响
            result = max(result,cnt[find(i)]);// 找到那个集合得。
        }
        cout<<result<<endl;
    }
    return 0;
}