#include<stdio.h>
#include<string.h>
#include<vector>
#include<cmath>
using namespace std;
vector<int> c[10005];
bool visit[10005];
int n,p[10005],U,V;
int Find(int x)
{
return x==p[x]?x:p[x]=Find(p[x]);
}
void dfs(int root,int fa)
{
if(root==U&&visit[V])
{
printf("%d\n",Find(V));
return;
}
if(root==V&&visit[U])
{
printf("%d\n",Find(U));
return;
}
visit[root]=true;
for(int i=0;i<c[root].size();i++)
dfs(c[root][i],root);
p[root]=fa;
}
int main()
{
int i,t,x,y,root;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=1;i<=n;i++) c[i].clear();
scanf("%d%d",&x,&y);
c[x].push_back(y);
root=x;
for(i=2;i<n;i++)
{
scanf("%d%d",&x,&y);
c[x].push_back(y);
if(y==root) root=x;
}
scanf("%d%d",&U,&V);
for(i=1;i<=n;i++) p[i]=i;
memset(visit,false,sizeof(visit));
dfs(root,root);
}
}
LCA离线算法
最新推荐文章于 2021-03-16 19:00:51 发布