#include <bits/stdc++.h>
using namespace std;
int main() {
int n,m,u,v;
map<int,int> mp;
scanf("%d %d",&m,&n);
vector<int> in(n+1),pre(n+1);
for(int i=1;i<=n;i++)
{
scanf("%d",&in[i]);
mp[in[i]]=i;
}
for(int i=1;i<=n;i++)
{
scanf("%d",&pre[i]);
}
while(m--)
{
scanf("%d %d",&u,&v);
if(mp[u]==0&&mp[v]==0)
{ printf("ERROR: %d and %d are not found.\n",u,v); }
else if(mp[u]==0)
{ printf("ERROR: %d is not found.\n",u); }
else if(mp[v]==0)
{ printf("ERROR: %d is not found.\n",v); }
else
{
int x1=mp[u],x2=mp[v];
for(int i=1;i<=n;i++)
{
int x=mp[pre[i]];
if(x==x1)
{ printf("%d is an ancestor of %d.\n",u,v); break; }
else if(x==x2)
{ printf("%d is an ancestor of %d.\n",v,u); break; }
else if((x>x1&&x<x2)||(x>x2&&x<x1))
{ printf("LCA of %d and %d is %d.\n",u,v,pre[i]); break;}
}
}
}
return 0;
}
PAT A1151 LCA in a Binary Tree (30分)
最新推荐文章于 2021-12-05 14:33:49 发布