本题使用dfs即可,判断五代以内是否有公共祖先,
注意初始化所有人的父母为-1,并且在输入一个人的时候,把父母性别存好
#include<iostream>
#include<unordered_map>
using namespace std;
const int N = 1e5+10;
int n,a,b,k;
struct peo{
int id;
char sex;
int idf=-1;
int idm=-1;
}p[N];
bool flag;
unordered_map<int,bool>st;
void dfs(int x,int u){
if(u>4||flag==0)return;
if(st[x]){flag=0;return;}
st[x]=1;
if(p[x].idf!=-1)dfs(p[x].idf,u+1);
if(p[x].idm!=-1)dfs(p[x].idm,u+1);
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
int id,idf,idm;
char sex;
scanf("%d %c %d %d",&id,&sex,&idf,&idm);
p[id]={id,sex,idf,idm};
p[idf].sex='M';
p[idm].sex='F';
}
cin>>k;
while(k--)
{
cin>>a>>b;
flag=1;
st.clear();
if(p[a].sex==p[b].sex){puts("Never Mind");continue;}
dfs(a,0);
dfs(b,0);
if(flag)puts("Yes");
else puts("No");
}
}