题目:https://www.patest.cn/contests/gplt/L2-016
不错的模拟,就是要注意标记父母的性别。
#include <bits/stdc++.h>
using namespace std;
struct node{
char sex;
int fa=-1,ma=-1;
}man[100005];
bool find(int a,int b,int cnt){
if(a==-1||b==-1)
return 1;
if(man[a].ma!=-1&&man[a].ma==man[b].ma||man[a].fa!=-1&&man[a].fa==man[b].fa)
return 0;
cnt++;
if(cnt>=4) return 1;
return find(man[a].fa,man[b].fa,cnt)&&find(man[a].ma,man[b].ma,cnt)&&find(man[a].fa,man[b].ma,cnt)&&find(man[a].ma,man[b].fa,cnt);
}
int main(){
int n,m;
cin>>n;
for(int i=0;i<n;i++){
int a;
cin>>a;
cin>>man[a].sex>>man[a].fa>>man[a].ma;
if(man[a].fa!=-1)
man[man[a].fa].sex='M'; //注意标注父母的性别
if(man[a].ma!=-1)
man[man[a].ma].sex='F';
}
cin>>m;
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
if(man[a].sex==man[b].sex)
cout<<"Never Mind"<<endl;
else if(find(a,b,0))
cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}