本文共 1634 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要判断一对情侣是否可以结婚。根据题目要求,两个人如果有五代以内的共同祖先,就不能结婚。我们需要通过分析两人各自的五代祖先来确定他们是否可以结婚。
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)) father和mother数组记录每个人的父亲和母亲ID,gender数组记录每个人的性别。get_ancestors函数使用广度优先搜索的方法,从当前节点开始,逐层扩展,记录五代以内的所有祖先。这个方法通过广度优先搜索高效地构建祖先树,并使用集合操作快速判断是否有共同祖先,确保了算法的正确性和效率。
转载地址:http://yesa.baihongyu.com/