CF750F New Year and Finding Roots 構造+樹論
正解:構造
解題報告:
傳送門!
交互題交互題!哇好新鮮啊QwQ
首先考慮最傻逼的做法,應該是每個人都能想到的
首先看一下它給的條件,考慮到完全二叉樹的性質,就可以發現,如果給的鄰居只有一個,說明是葉子,有兩個,說明是根,有三個,說明是普通的節點
然後就分情況討論鴨(以下內容都是從最差的情況即h=7為基礎的討論
如果運氣好,問到了根,得嘞那就不用再問辣ans出來辣
如果問到了一個葉子節點,那就會給一個非根非葉子節點,就繼續詢問這個普通節點
如果問到了一個普通節點,就會有三個鄰居,那就依次選,並利用已知條件優化一下
具體怎麽做我就不說辣反正就是枚舉一通+所有人都想得到的優化
說一下正解趴
首先可以想到,假如給一條鏈,鏈的一端是葉子節點,那麽這條鏈上每個節點的深度都能知道了是趴
那假如我們第一次問,問到了一個普通節點,現在要求它的深度,怎麽求呢
隨便問兩條鏈,從三個鄰居中選出倆然後一條路問到黑的那種,經過節點數比較少的那條一定是經過它的兒子的筆直向下的一條鏈(如果相等就都是)(不理解的可以畫下圖很快就能get辣
同時我們還可以知道三個鄰居中哪個是它爹哪些是它崽
然後我們就能get一個構造方法
隨機一個點,按照上面的方法求出它的深度
↓
找到當前已知深度最低的點
↓ ↑
隨機一條鏈,更新當前點祖先的深度,回到操作2
就這麽一直做做做下去就能保證一直往上就能找到根節點了嘛
但是繼續思考
當h=7的時候,假如運氣有這——麽背,當詢問到深度=2的時候(規定根節點深度為1),如果選一條鏈通向葉子節點,就要問5次,就會要超過辣
但是考慮,當深度=2的時候,我們未知的鄰居節點只有兩個,一定有一個是根,所以只要問1次就出來了,問5次肯定虧辣
當深度=3的時候一樣,具體不剖析了反正一樣是,打破砂鍋問到底就很虧不如直接問
最後通過一系列計算可以發現當最慘的情況下也只用問17次,但是第17次問到的一定是樹根,所以其實只要問16次,就剛好!
over!
等下放代碼QwQ!
CF750F New Year and Finding Roots 構造+樹論