L2-016 愿天下有情人都是失散多年的兄妹 (25分)团体设计天梯赛

16 篇文章 0 订阅
#include <bits/stdc++.h>
using namespace std;
typedef struct
{
    int id;
    char sex;
    int fa, ma;
} P;
const int N = 100100;
P p[N];
void dfs(int s, int idx, set<int> &S)
{
    if (idx >= 5)
        return;
    if (p[s].fa != -1 && p[s].fa != 0)
    {
        S.insert(p[s].fa);
        dfs(p[s].fa, idx + 1, S);
    }
    if (p[s].ma != -1 && p[s].ma != 0)
    {
        S.insert(p[s].ma);
        dfs(p[s].ma, idx + 1, S);
    }
}
int main(void)
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        int id;
        char sex;
        int fa, ma;
        scanf("%d %c %d %d", &id, &sex, &fa, &ma);
        p[id] = {id, sex, fa, ma};
        if (fa != -1)
        {
            p[fa].id = fa;
            p[fa].sex = 'M';
        }
        if (ma != -1)
        {
            p[ma].id = ma;
            p[ma].sex = 'F';
        }
    }
    int m;
    cin >> m;
    
    while (m--)
    {
        int a, b;
        scanf("%d %d", &a, &b);
        if (p[a].sex == p[b].sex)
        {
            printf("Never Mind\n");
            continue;
        }
        set<int> Sa;
        set<int> Sb;
        dfs(a, 1, Sa);
        dfs(b, 1, Sb);
        bool flag = true;
        for (auto it = Sa.begin(); it != Sa.end(); it++)
        {
            if (Sb.find(*it) != Sb.end())
            {
                flag = false;
                break;
            }
        }
        if (flag)
        {
            cout << "Yes" << endl;
        }
        else
        {
            cout << "No" << endl;
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值