[英]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.