首页 文章

树分裂(基于算法)[关闭]

提问于
浏览
0

这是一家公司提出的编码问题:

给定一个具有N个节点的树和与每个节点相关联的权重,并给出边缘(存在于树中) . 您必须移除一个边缘,使得创建的两个树的权重之和的差异最大 .

输入:

第一行包含N否 . 节点第二行包含N个积分,表示每个节点的权重,后跟N-1行,表示存在的边 .

输出:

创建的树的权重的最大差异 .

例:

输入:

第一个测试案例:

3
8 7 8
10
21

输出: 7

第二个测试案例:

9
5 5 4 1 8 8 3 5 2
10
20
31
41 
53 
60
75
81

输出: 13 (不确定此输出)

1 回答

  • 2

    如果权重不能为负数,那么最佳解决方案显然是切断一片叶子 . 假设总树重为 S ,我们可以在 O(n) 中找到它,如下所示:

    1. ans:= 0
      2.对于每个顶点v,ans:= max(ans,abs(S - 2 * weight [v]))//剩余部分与叶子之间的差异
      3.返回ans

相关问题