pat L2-016. 愿天下有情人都是失散多年的兄妹(dfs)

该博客主要讲解了PAT编程竞赛中的一道题目,涉及如何通过DFS算法检查两个人是否有共同祖先,并在五代之内。在解决这个问题时,需要注意记录每个个体的性别以及父母的性别信息,因为某些情况下父母信息可能不直接给出,而查询中可能包含这些信息。博主分享了解题思路和关键代码片段。
摘要由CSDN通过智能技术生成

题意:

共同祖先在五代值内不能通婚。给你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;
   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值