思路:
经典LCA问题,且只有一次询问,可以用普通方法,即两结点向根作线,两线第一次交点即是答案
代码:
#include <iostream>
#include <string.h>
using namespace std;
int fa[10005];
bool vst[10005];
void sig(int a)
{
if(a==-1) return ;
vst[a]=1;
sig(fa[a]);
}
int check(int a,int b)
{
sig(a);
int k=b;
while(k!=-1)
{
if(vst[k])
return k;
k=fa[k];
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
memset(vst,0,sizeof(vst));
memset(fa,-1,sizeof(fa));
cin>>n;
for(int i=0;i<n-1;i++)
{
int x,y;
cin>>x>>y;
fa[y]=x;
}
int a,b;
cin>>a>>b;
cout<<check(a,b)<<endl;
}
return 0;
}