1. 程式人生 > 其它 >AGC005 部分簡要題解

AGC005 部分簡要題解

簡化情況很 nb!

E

首先注意到這個問題事實上非常複雜(兩棵樹上博弈),基礎的轉化無效,於是考慮簡化情形。

手玩很多樣例可以發現,似乎很容易出現無限迴圈的情況,進一步地,有觀察:

  • 若第一棵樹上存在相鄰點 \(u, v\) 在第二棵樹上距離 \(> 2\),那麼只要走到 \(u, v\) 其中一個點先手一定存在策略能夠無限迴圈下去。

顯然走到哪個點是對稱的,不妨假設走到 \(u\)
那麼先手可以在後手走到 \(u\) 在第二棵樹上相鄰點時移動到 \(v\),由於樹上路徑唯一,後手不可能在一次操作內移動到 \(v\)

藉此,我們將滿足上述情形的點對稱作關鍵點,它們的連邊稱作關鍵邊。

注意到我們不需要考慮關鍵邊(因為走了關鍵邊必定在此之前走到了關鍵點),於是我們將關鍵邊全部刪去,第一棵樹變為森林,此時問題轉化為:

  • 先手從 \(X\) 開始走,走到關鍵點贏,後手從 \(Y\) 開始追趕 \(X\) 碰到了後手贏(先手無法贏的時候儘可能最大化步數,後手儘可能最小化步數)。確定雙方誰贏並且在後手贏的時候輸出最大步數。

由於此時第一棵樹上的連邊在第二棵樹上距離 \(\le 2\),因此考慮以第二棵樹為主樹將第一棵樹在其上連虛邊(這樣方便觀察)。

此時貌似仍然沒有頭緒,考慮 弱化問題:所有第一棵樹上連邊在第二棵樹上距離 \(=1\)

此時顯然有如下觀察(證明不難):

  • 後手每次的最優策略一定是向先手方向移動。
  • 先手的最優策略一定是走到一個不會在路徑過程中被後手撞到的(最遠)位置然後乖乖等死,或找到一個不會在路徑過程中被後手撞到的關鍵點(優先)。

對於後者,不難發現這些位置 \(u\) 滿足:\(dis_{X, u} < dis_{Y, u}\)

充分性顯然,必要性可以考慮先手的最優策略。

那麼找到滿足上述條件點中 \(dis_{Y, u}\) 的最大值即可,答案就是其的兩倍。

回到原問題,我們做類似的觀察可以發現先手後手的最優策略與弱化問題一致!

我們容易證明:先手在與後手距離 \(\le 2\) 的時候最優策略是遠離先手 / 不動(無路可走)。
因此可以證明先手的最優策略。
而後手的最優策略顯然是先手最優策略下的答案上界。

因此只需要找到可行點的判定條件即可。

不難發現,此時一個點可行當且僅當:

  • 其在第一棵樹上的所有祖先(以 \(X\)
    為根)\(u\)(包含其本身)滿足:\(disA_{X, u} < disB_{Y, u}\)

充分性考慮歸納證明。
必要性容易通過先手在與後手距離 \(\le 2\) 的時的必勝策略證明(先手不會在 \(\ge\) 的位置繼續向後手靠近)

於是直接找到上述的可行點判定先手是否贏 / 後手贏情況下的最多次數即可。

複雜度 \(\mathcal{O}(n \log n)\),瓶頸在於求樹上兩點距離,當然本題中只需要判定距離是否 \(\le 2\),於是可以容易優化至 \(\mathcal{O}(n)\),但沒太大必要。

GO!