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

    你可能感兴趣的文章
    php csv 导出
    查看>>
    php curl 实例+详解
    查看>>
    php curl_init函数用法(http://blog.sina.com.cn/s/blog_640738130100tsig.html)
    查看>>
    php curl_multi批量发送http请求
    查看>>
    php curl请求微信发红包接口出现错误:Peer's Certificate issuer is not recognized.
    查看>>
    PHP curl请求错误汇总和解决方案
    查看>>
    php declare(ticks=1)
    查看>>
    UVA 10474
    查看>>
    php echo 输出 锘?... 乱码问题
    查看>>
    PHP empty、isset、isnull的区别
    查看>>
    ReferenceQueue的使用
    查看>>
    PHP FastCGI进程管理器PHP-FPM的架构
    查看>>
    referenceQueue用法
    查看>>
    Springboot处理跨域的方式(附Demo)
    查看>>
    php flush()刷新不能输出缓冲的原因分析
    查看>>
    Referenced classpath provider does not exist: org.maven.ide.eclipse.launchconfig
    查看>>
    Refactoring-Imporving the Design of Exsiting Code — 代码的坏味道
    查看>>
    PHP imap 远程命令执行漏洞复现(CVE-2018-19518)
    查看>>
    php include和require
    查看>>
    ref 和out 区别
    查看>>