Algorithm IOI2003:如何计算树中具有最小余额的节点?
这是一个需要在树中找到平衡最小的节点的问题。余额定义为: 删除任何节点 从树中产生一个森林:一个或多个树的集合。将节点的平衡定义为通过从T中删除该节点而创建的林T中最大树的大小 对于示例树,如: 26Algorithm IOI2003:如何计算树中具有最小余额的节点?,algorithm,graph,tree,Algorithm,Graph,Tree,这是一个需要在树中找到平衡最小的节点的问题。余额定义为: 删除任何节点 从树中产生一个森林:一个或多个树的集合。将节点的平衡定义为通过从T中删除该节点而创建的林T中最大树的大小 对于示例树,如: 261214453731 解释如下: 删除节点4会产生两棵树,其成员节点为{5}和{1,2,3,6,7}。这个 这两棵树中较大的树有五个节点,因此节点4的余额为五。删除节点 1产生一个由三棵大小相等的树组成的森林:{2,6}、{3,7}和{4,5}。每棵树 有两个节点,因此节点1的余额为两个 你能为这个
12
14
45
37
31 解释如下: 删除节点4会产生两棵树,其成员节点为{5}和{1,2,3,6,7}。这个 这两棵树中较大的树有五个节点,因此节点4的余额为五。删除节点 1产生一个由三棵大小相等的树组成的森林:{2,6}、{3,7}和{4,5}。每棵树 有两个节点,因此节点1的余额为两个 你能为这个问题提供什么样的算法
谢谢我假设您已经仔细研究了这个问题:阅读解决方案没有帮助,您只能通过自己解决问题来更好地解决这些问题 所以要观察的一件事是,输入是一棵树。这意味着每条边将两棵较小的树连接在一起。删除一条边将生成两棵断开连接的树(由两棵树组成的森林) 因此,如果计算边一侧的树的大小,然后计算另一侧的树的大小,则应该能够查看节点的边并询问“此边另一侧的树的大小是多少?” 您可以使用动态规划计算树的大小-您的循环状态是“我在哪边?我在哪边?”并计算树在该节点上“挂起”的大小。这是问题的症结所在 有了这些数据,就可以遍历所有节点,查看它们的边并询问“此边另一侧的树的大小是多少?”从那里,您只需选择最小值
希望这会有所帮助。我假设您已经仔细研究了这个问题:阅读解决方案没有帮助,您只能通过自己解决问题来更好地解决这些问题 所以要观察的一件事是,输入是一棵树。这意味着每条边将两棵较小的树连接在一起。删除一条边将生成两棵断开连接的树(由两棵树组成的森林) 因此,如果计算边一侧的树的大小,然后计算另一侧的树的大小,则应该能够查看节点的边并询问“此边另一侧的树的大小是多少?” 您可以使用动态规划计算树的大小-您的循环状态是“我在哪边?我在哪边?”并计算树在该节点上“挂起”的大小。这是问题的症结所在 有了这些数据,就可以遍历所有节点,查看它们的边并询问“此边另一侧的树的大小是多少?”从那里,您只需选择最小值
希望能有所帮助。您基本上希望为每个节点检查3件事:
然后在节点中存储一个值,我们称之为maxTree,该节点在其所有子树和(所有子树的总和)-(树的大小)之间保持最大值 这样,您可以计算O(N)中的所有子树大小
在遍历树时,您可以保存一个变量,该变量保存到目前为止找到的最小值。您基本上希望为每个节点检查三件事:
然后在节点中存储一个值,我们称之为maxTree,该节点在其所有子树和(所有子树的总和)-(树的大小)之间保持最大值 这样,您可以计算O(N)中的所有子树大小
在遍历树时,可以保存一个变量,该变量保存到目前为止找到的最小值。。。。这只是一棵普通的树吗?或者你能自己做一棵树吗?yochai这不是家庭作业。我不是学生,只是想解决这个问题。树就像x->Y家庭作业的输入一样给出。。。这只是一棵普通的树吗?或者你能自己做一棵树吗?yochai这不是家庭作业。我不是学生,只是想解决这个问题。树的输入方式与x->y的输入方式相同