博客
关于我
7-4 愿天下有情人都是失散多年的兄妹 (25 分)
阅读量:261 次
发布时间:2019-03-01

本文共 1634 字,大约阅读时间需要 5 分钟。

为了解决这个问题,我们需要判断一对情侣是否可以结婚。根据题目要求,两个人如果有五代以内的共同祖先,就不能结婚。我们需要通过分析两人各自的五代祖先来确定他们是否可以结婚。

方法思路

  • 输入处理:首先读取输入数据,包括每个人的ID、性别、父亲ID和母亲ID。将这些信息存储在适当的数据结构中。
  • 构建祖先树:对于每个人,生成他们的五代以内的祖先集合。使用广度优先搜索的方法,从当前节点开始,逐层扩展,直到达到五代。
  • 判断关系:对于每一对情侣,分别生成他们的五代祖先集合。如果两个集合有交集,说明他们有共同的祖先,不能结婚;否则,如果是异性,能结婚。
  • 解决代码

    n = int(input())maxn = 100010father = [-1] * (maxn + 1)mother = [-1] * (maxn + 1)gender = [''] * (maxn + 1)for _ in range(n):    parts = input().split()    id = int(parts[0])    g = parts[1]    f = int(parts[2])    m = int(parts[3])    father[id] = f    mother[id] = m    gender[id] = gk = int(input())results = []def get_ancestors(x, depth):    visited = set()    current_level = [x]    for _ in range(depth):        next_level = []        for node in current_level:            if node != -1:                p = father[node]                m = mother[node]                next_level.append(p)                next_level.append(m)        current_level = next_level        for node in current_level:            if node != -1:                visited.add(node)    return visitedfor _ in range(k):    x, y = map(int, input().split())    if gender[x] == gender[y]:        results.append("Never Mind")        continue    x_ance = get_ancestors(x, 5)    y_ance = get_ancestors(y, 5)    if x_ance & y_ance:        results.append("No")    else:        results.append("Yes")print(' '.join(results))

    代码解释

  • 输入处理:读取输入数据并存储到相应的数组中,fathermother数组记录每个人的父亲和母亲ID,gender数组记录每个人的性别。
  • 构建祖先树get_ancestors函数使用广度优先搜索的方法,从当前节点开始,逐层扩展,记录五代以内的所有祖先。
  • 判断关系:对于每一对情侣,生成他们的五代祖先集合,检查是否有交集。如果有交集,输出"No";否则,输出"Yes"。如果两人性别相同,直接输出"Never Mind"。
  • 这个方法通过广度优先搜索高效地构建祖先树,并使用集合操作快速判断是否有共同祖先,确保了算法的正确性和效率。

    转载地址:http://yesa.baihongyu.com/

    你可能感兴趣的文章
    pip3 install PyQt5 --user 失败
    查看>>
    pip3命令全解析:Python3包管理工具的详细使用指南
    查看>>
    pip3安装命令重复创建文件‘/tmp/pip-install-xxxxx/package‘失败
    查看>>
    PIPE 接口信号列表
    查看>>
    pipeline配置与管理Job企业级实战
    查看>>
    pipeline项目配置实战
    查看>>
    Pipenv 与 Conda?
    查看>>
    QVGA/HVGA/WVGA/FWVGA分辨率屏含义及大小//Android虚拟机分辨率
    查看>>
    pipreqs : 无法将“pipreqs”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径 正确,然后再试一次。
    查看>>
    pipy国内镜像的网址
    查看>>
    quiver绘制python语言
    查看>>
    pip下载缓慢
    查看>>
    PIP使用SSH从BitBucket安装自定义软件包,无需输入SSH密码
    查看>>
    pip在安装模块时提示Read timed out
    查看>>
    Pix2Pix如何工作?
    查看>>
    QuickBI助你成为分析师——搞定数据源
    查看>>
    pkl来存储python字典
    查看>>
    quick sort | 快速排序 C++ 实现
    查看>>
    pkpmbs 建设工程质量监督系统 文件上传漏洞复现
    查看>>
    pku 2400 Supervisor, Supervisee KM求最小权匹配+DFS回溯解集
    查看>>