题目:
输入输出样例:
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int MAXN = 1e4+5;
int n,m;
bool flag,vis[100005];
struct node
{
char sex;
int fa=-1,ma=-1;
}no[100005];
void Dfs1(int id,int cnt)
{
vis[id] = true;
if(cnt == 5) return;
if(no[id].fa != -1)
Dfs1(no[id].fa,cnt+1);
if(no[id].ma != -1)
Dfs1(no[id].ma,cnt+1);
return;
}
void Dfs2(int id,int cnt)
{
if(no[id].fa != -1 && vis[no[id].fa])
{
flag = true;
return;
}
if(no[id].ma != -1 && vis[no[id].ma])
{
flag = true;
return;
}
if(cnt == 5) return;
if(no[id].fa != -1)
Dfs2(no[id].fa,cnt+1);
if(no[id].ma != -1)
Dfs2(no[id].ma,cnt+1);
}
int main()
{
scanf("%d",&n);
int id,id1,id2;
char gender;
for(int i=1;i<=n;++i)
{
scanf("%d %c %d %d",&id,&gender,&id1,&id2);
no[id].sex = gender;
no[id].fa = id1;
no[id].ma = id2;
no[id1].sex = 'M';
no[id2].sex = 'F';
}
scanf("%d",&m);
int x1,x2;
while(m--)
{
flag = false;
memset(vis,false,sizeof(vis));
scanf("%d%d",&x1,&x2);
if(no[x1].sex == no[x2].sex)
printf("Never Mind\n");
else
{
Dfs1(x1,1);
Dfs2(x2,1);
if(flag)
printf("No\n");
else
printf("Yes\n");
}
}
return 0;
}