最小最大边缘权重树

时间:2019-01-05 13:50:52

标签: python algorithm tree

给出一棵具有N个节点和N-1个双向边缘并给定整数S的树。现在,您必须将权重分配给该树的边缘,使得:

1。所有边缘的权重之和等于S

2。对于树的每个可能的直径,其路径所覆盖的所有边缘的最大权重是最小的。

输出可能的最小重量。

2 个答案:

答案 0 :(得分:1)

这种方法是正确的,但算法却不正确。

示例:1-2、1-3、1-4、4-5, 2是其中一个直径的端点 但是(2-3)距离与(2,5)一样

但是在这棵树中,每个边缘都是直径的一部分。

答案 1 :(得分:0)

基本上,您需要确定直径上是否有边缘。如果存在一个权重,则将所有权重分配给该边,因此直径上的最大权重为0。否则,将权重平均分配到边之间。

执行此操作的一种方法是找到任何直径的中心。其他所有直径也将穿过此中心。在简单的情况下,直径的边缘数是偶数,您需要从中心点运行DFS,并检查到所有叶子的距离是否相同。如果是,则返回S/#edges,否则返回0。如果直径的边数为奇数,则可以在直径的中心边的中间添加虚拟顶点并从其开始。复杂度为O(V+E)