这是一家公司提出的编码问题:
给定一个树,其中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
(不确定此输出)
答案 0 :(得分:2)
如果权重不能为负数,那么最佳解决方案显然是切断一片叶子。假设总树重为 S ,我们可以在 O(n) 中找到它,如下所示:<登记/>
1. ans := 0
2.对于每个顶点 v , ans := max ( ans , abs ( S - 2 * 重量 [ v ]))//剩余部分与叶子之间的差异
3.返回 ans