Algorithm 树划分(基于算法)
这是一家公司提出的编码问题: 给定一棵树,其中有N个节点和与每个节点关联的权重,以及 给定了边(在树中)。您必须删除一条边,例如 创建的两棵树的权重之和的差值最大 输入: 第一行包含N个节点数第二行包含N个整数 表示每个节点的权重,后跟显示边的N-1条线 现在 输出: 所创建树的最大权重差 例如: 输入: 第一个测试用例:Algorithm 树划分(基于算法),algorithm,Algorithm,这是一家公司提出的编码问题: 给定一棵树,其中有N个节点和与每个节点关联的权重,以及 给定了边(在树中)。您必须删除一条边,例如 创建的两棵树的权重之和的差值最大 输入: 第一行包含N个节点数第二行包含N个整数 表示每个节点的权重,后跟显示边的N-1条线 现在 输出: 所创建树的最大权重差 例如: 输入: 第一个测试用例: 3 8 7 8 10 21 9 5 5 4 1 8 8 3 5 2 10 20 31 41 53 60 75 81 输出:7 第二个测试用例: 3 8 7 8 10
3
8 7 8
10
21
9
5 5 4 1 8 8 3 5 2
10
20
31
41
53
60
75
81
输出:7
第二个测试用例:
3
8 7 8
10
21
9
5 5 4 1 8 8 3 5 2
10
20
31
41
53
60
75
81
输出:
13
(不确定此输出)如果权重不能为负,显然最佳解决方案将是切掉一片叶子。假设总树重为S,我们可以在O(n)中找到它,如下所示:1.ans:=0
2.对于每个顶点v,ans:=max(ans,abs(S-2*weight[v])//剩余部分和叶之间的差值
3.return ans好的,那么你尝试了什么,失败在哪里?@OliCharlesworth我对困难的问题有点陌生,所以我没走多远……我只是试着弄清楚逻辑……我觉得我应该存储所有可能的树权重,然后找到最大值……但不确定具体如何:(权重可以是负数?@GrigorGevorgyan:不,它们大于0