题意:
共同祖先在五代值内不能通婚。给你n个人的性别和父母。然后由k次询问,问你两个人能否通婚。
解题思路:
用vetor记录边,然后dfs的时候递归五次判断有没有相同的祖先就行。
这个题的tricks是,要把父母的性别也顺带记下来,会出现一些父母的信息没有单独给出,然后询问 里也闻到了的数据。
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
vector<int>edg[maxn];
char sex[maxn+100];
int ans;
int top;
int que[maxn];
void dfs(int x, int s, int e)
{
int i, j;
if(s>=5)return;
if(e==0)
{
for(i=0; i<top; i++)
{
if(x==que[i])
{
ans=1;
return;
}
}
}
else que[top++]=x;
for(i=0; i<(int)edg[x].size(); i++)
{
dfs(edg[x][i], s+1, e);
}
return;
}
int main()
{
int n;
cin>>n;
int i, j;