[英]Find minimum value needed to make all tree nodes zero by incrementing asjacent nodes at each step
问题在于找到使所有节点为零所需的最小值,我们称其为K。
给出了一个非二进制数字树。
在第一步中,您可以选择一个节点作为起点。 如果K大于该节点的值,则将该值更改为零,并增加相距一到两个距离的其他节点的值。 请注意,一旦节点的值变为零,就不会再增加它,也不会允许与其连接的节点增加。
然后,您应该选择另一个在距离1处具有至少一个零值节点的节点,然后重复该过程
5
\
2
\
5
当我们从值5的叶子开始时,我们有
6
\
3
\
0
然后我们应该选择3; 我们不能选择6,因为它在距离1中没有零节点!
7
\
0
\
0
最后,我们选择7且K = 7,但是如果首先选择2,则我们有:
6
\
0
\
6
那么我们应该选择6; 因为现在值为2的节点为零,所以连接被切断,并且通过更改值为6的节点的值,将不再发生增量!
0
\
0
\
6
所以最小K = 6
找到最大节点并从中开始(如果有多个最大节点,则选择较早的那个)
我定义了一个数组,我们将其称为可能的节点 ,然后向其中添加在步骤1中找到的节点。
当可能的节点不为空时,我执行以下步骤:
一种。 在可能的节点中选择最大值; 我们称之为max_node
湾 使max_node功率为零并更新K
C。 增加其父母,祖父母,子女,孙子女和兄弟姐妹的价值(如果之前不为零)
d。 将其非零值的父项和子项添加到可能的节点
即 从可能的节点中删除max_node
实际上这是一个作业问题,但是这种方法不是正确的方法! 它给出错误的答案并达到超时限制。
节点数≤3×10 5
节点-10 9≤值≤10 9
时间限制:2.5秒
内存限制:256 MB
如果从树中的随机节点开始,则K为以下各项的最大值:
这是因为限制,您只能选择与0节点相邻的节点,并且这些节点不能递增。
我们可以得出结论,Kmin必须在max和max + 2之间。
因此,O(n)算法可能如下所示:
max
并计算有多少节点具有该值=> maxCount
maxCount = 1
则计算有多少个节点的值max - 1
=> max1Count
,有两种可能性:
max1Count = 0
或值的相邻节点的数量max - 1
与值的节点max
等于max1Count
=>该解决方案是max
max + 1
max
的节点:
max
的第一次出现的深度处仅找到一个节点:
max
的子maxCount - 1
等于maxCount - 1
=>解为max + 1
max
和其子与值的计数max
等于maxCount - 2
=>该解决方案是max + 1
太 max
值,但是有maxCount - 1
它们都具有相同的父级,并且值max
=>解决方案也是max + 1
max + 2
maxCount
节点并且它们都具有相同的父节点=>解决方案为max + 1
max + 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.