博客
关于我
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/

    你可能感兴趣的文章
    pyqt5教程13:客户定制组件
    查看>>
    pyqt5教程6:信号和事件
    查看>>
    PyQt5教程7:布局Layout管理
    查看>>
    pyqt5教程8:对话框
    查看>>
    pyqt5教程9:Widgets组件
    查看>>
    PyQt5教程——组件(7)
    查看>>
    pyqt5计时器的使用
    查看>>
    PyQt5设计桌面程序步骤
    查看>>
    PyQt5:检查鼠标是否在Enter-Event中按住
    查看>>
    pyqt出现“Ui_Dialog has no attribute “show””
    查看>>
    PyQt:如何使用QAxWidget引用发送参数
    查看>>
    PyQt:我可以制作一个带有图标和文本的工具栏按钮吗?
    查看>>
    pyscopg2:是否可以在循环中动态添加 %s
    查看>>
    Pyserial 缓冲区的填充速度比我读的快
    查看>>
    PySpark - 在数据框中求和一列并将结果返回为 int
    查看>>
    pyspark On Yarn 的模块依赖问题
    查看>>
    PySpeech(Python)-转录MP3文件?
    查看>>
    Pyspider WebUI 未授权访问致远程代码执行漏洞复现
    查看>>
    pyspider爬虫学习-文档翻译-Architecture.md
    查看>>
    pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it‘s not in your path
    查看>>