#include<iostream>
#include<cmath>
#include<string.h>
#include<algorithm>
#include<iomanip>
#include<cstdio>
#include<string>
#include<map>
#include<vector>
typedef long long ll;
using namespace std;
const int N=10001;
int f[N],r[N];
vector<int> v[N];
void dfs(int u,int dep)
{
r[u]=dep;
for(vector<int>::iterator it=v[u].begin();it!=v[u].end();it++)
dfs(*it,dep+1);
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
int a,b;
scanf("%d",&n);
memset(f,255,sizeof(f));
for(int i=1;i<=n;i++) v[i].clear();
for(int i=0;i<n-1;i++)
{
scanf("%d%d",&a,&b);
v[a].push_back(b);
f[b]=a;
}
int i;
for(i=1;f[i]>=0;i++);
dfs(i,0);
scanf("%d%d",&a,&b);
while(a!=b)
{
if(r[a]>r[b]) a=f[a];
else b=f[b];
}
printf("%d\n",a);
}
return 0;
}
POJ 1330 Nearest Common Ancestors (树的遍历求解层次性问题)
最新推荐文章于 2019-08-08 13:00:12 发布