這個部分在《演算法筆記》是沒有的。
這種新背景的題目,如果之前沒有接觸過,那只能從普通的定義去解,即:
1.建樹
2.找祖先,找到一致的就是最低公共祖先
例子:hihocoder - 1062 、
二叉樹的公共父結點
但是如果之前接觸過,就能立即從遞迴的原理解:
假設要查詢lca的結點:
1.是父子,父節點就是lca
2.在目前根的左右,則目前的根就是lca
3.目前在根的同一側,則目前的根設為該側的子節點,繼續遞迴
真題:樹、lca
18秋第四題
1151
lca in a binary tree (30分)
樹、bst、lca
17冬第四題
1143
lowest common ancestor(30分)
倍增LCA複習
時間過去了如此之久,我連倍增lca都不怎麼記得了,要粗事啊。首先預處理層數和每個節點的父親,然後預處理p陣列,p i,j 表示i向上第2 j個祖先。最後對於每個詢問x,y先把x,y變成同一層數的 x或y向上走直到兩個層數相等 然後x,y同時向上走,直到x和y的父親相同位置。自 1.dfs預處理出所有...
浙大pat甲級 1024
可用3個vector來進行處理,先將輸入的數字都壓入到第1第2個vector中,從i 0到k迴圈判斷是否為對稱數,如果不是對稱數則將其與倒轉數相加,並將得到的每一位數加入到第三個vector的頭部,並將新的第三個vector重新賦值給第一第二,直到該數為對稱數或i k結束迴圈。ac include ...
浙大PAT甲級 1039
一開始想到用map 但是會超時。由於題目中的名字由三個字母和乙個數字組成,因此有26 26 26 10種,因此可以用hash來做。使用setmm max max 26 26 26 10 5 同時輸入名字時也應改為char s 5 scanf來輸入。ac include include include...