题目:
思路分析:
注意 在输入父母的同时 要标记父母的性别(我忘了!!!我是fw)
然后直接以二个节点搜索 五层 如果有一个被访问过了那么就有近亲!dfs搜索就行
代码实现:
const int MAX=100010;
int vis[MAX];
vector<int>v[MAX];
string sex[MAX];
int flag;
void dfs(int pos,int c){
if(c>=4) return;
for(int i=0;i<v[pos].size();i++){
int u=v[pos][i];
if(vis[u]){
flag=1;
}
else {
vis[u]=1;
dfs(u,c+1);
}
}
}
int main(){
int n,k;
cin>>n;
while (n--) {
int id;
cin>>id;
cin>>sex[id];
int fa,ma;
cin>>fa>>ma;
if(fa!=-1){
v[id].push_back(fa);
sex[fa]='M';
}
if(ma!=-1){
v[id].push_back(ma);
sex[ma]='F';
}
}
cin>>k;
while (k--) {
mms(vis,0);
int a,b;
cin>>a>>b;
if(sex[a]==sex[b]){
cout<<"Never Mind"<<endl;
}
else {
vis[a]=1;
vis[b]=1;
flag=0;
dfs(a,0);
dfs(b,0);
if(flag)cout<<"No"<<endl;
else cout<<"Yes"<<endl;
}
}
}