相似的兄弟 本节内容计 100 分,至少得 100 分可通过 反馈 我要提问 1000ms 131072K 有一无向连通图 GG(nn 个顶点,n - 1n−1 条边,点从 11 到 nn 依次编号)。当然,你能看出这其实就是一棵树,请找出所有满足以下条件的节点: 该节点不是叶子节点(度不为 00)。 该节点下面所有的子树大小必须相同(如果下面只有一棵子树也默认为相同)。 注意,该树为有根树,你需要先找到它的根才能开始访问其他节点。 请你设计程序,完成上面要求。 输入格式 第一行包含 11 个整数 nn。 接下来 n-1n−1 行,每行包含 22 个用空格隔开的正整数 uu、vv,表示编号为 uu 和编号为 vv 的点之间有边相连,其中 uu 是 vv 的父亲节点。
时间: 2023-02-07 16:05:33 浏览: 162
这道题的意思是,给定一棵有根树,找出所有满足以下条件的节点:
1. 该节点不是叶子节点(度不为 0)。
2. 该节点下面所有的子树大小必须相同(如果下面只有一棵子树也默认为相同)。
输入格式中给定了有 n 个顶点和 n-1 条边的信息,表示这是一棵有根树。接下来 n-1 行给出了边的信息,表示编号为 u 和编号为 v 的点之间有边相连,其中 u 是 v 的父亲节点。
为了解决这道题,我们需要遍历整棵树,对于每个节点都计算其子树大小,然后检查是否满足条件 1 和条件 2。
我们可以使用递归的方法来遍历树,对于每个节点,我们先统计它的子树大小,然后检查是否满足条件 1 和条件 2。如果满足条件,就将该节点加入答案中。然后再对该节点的每个子节点递归调用函数,继续遍历整棵树。
下面是参考代码:
```python
def dfs(node, parent):
# 统计该节点的子树大小
size = 1
for child in children[node]:
if child == parent:
continue
size += dfs(child, node)
阅读全文