【发布时间】:2019-01-05 13:50:51
【问题描述】:
给定一棵具有 N 个节点和 N-1 个双向边的树,并给定一个整数 S。现在,您必须为这棵树的边分配权重,这样:
1.所有边的权重之和等于S
2.对于树的每个可能的直径,其路径所覆盖的所有边缘的最大权重是最小的。
输出可能的最小重量。
【问题讨论】:
-
这里没有问题。你只是放弃了你的家庭作业问题,没有表现出任何努力去解决它。
给定一棵具有 N 个节点和 N-1 个双向边的树,并给定一个整数 S。现在,您必须为这棵树的边分配权重,这样:
1.所有边的权重之和等于S
2.对于树的每个可能的直径,其路径所覆盖的所有边缘的最大权重是最小的。
输出可能的最小重量。
【问题讨论】:
方法正确,但算法不正确。
示例:1 - 2 , 1 - 3, 1 - 4, 4 - 5 , 2 是其中一个直径的端点 但是 (2 - 3) 距离和 (2, 5) 不一样
但是在这棵树中,每条边都是直径的一部分。
【讨论】:
基本上,您需要找出是否存在不在直径上的边缘。如果有,则将所有权重分配给该边,因此直径上的最大权重为 0。否则,在边之间均匀分配权重。
您可以做到这一点的一种方法是找到任意直径的中心。每隔一个直径也将通过这个中心。在简单的情况下,直径有偶数个边,您需要从中心点运行 DFS 并检查到所有叶子的距离是否相同。如果是,则返回S/#edges,否则返回0。如果直径有奇数条边,您可以在直径中心边的中间添加虚拟顶点并从它开始。复杂度为O(V+E)。
【讨论】: