#include<iostream>
#include<cstdio>
//#include<string.h>
using namespace std;
int t,n,x,y;
int sets[20000];
bool flag[20000];
int find_set(int x){
int y=sets[x];
flag[x]=true;
if(y==x) return y;
else{
y=find_set(sets[x]);
sets[x]=y;
return y;
}
}
int ans(int n){
if(flag[n]) return n;
else return ans(sets[n]);
}
int main(){
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=1;i<=n;i++){
sets[i]=i;
flag[i]=false;
}
for(int i=1;i<n;i++){
scanf("%d%d",&x,&y);
sets[y]=x;
}
/*for(int i=1;i<=n;i++)
cout<<sets[i]<<endl;*/
scanf("%d%d",&x,&y);
//memset(flag,sizeof(bool),false);
find_set(x);
/*for(int i=1;i<=n;i++)
cout<<sets[i]<<endl;*/
printf("%d\n",ans(y));
}
return 0;
}
lca离线算法模板(poj1330验证)
最新推荐文章于 2024-01-08 02:04:21 发布