1. 程式人生 > 其它 >【筆記】樹/圖上博弈

【筆記】樹/圖上博弈

不一定是組合博弈。

ABC246G - Game on Tree 3

比較簡單的樹上博弈,首先答案具有單調性,我們直接二分答案然後 DP 判定即可。

P8276 [USACO22OPEN] Hoof and Brain P

圖上博弈。

直接做沒有什麼思路,考慮從結束狀態倒推。結束狀態一定是一個棋子 \(b\) 堵住另一個棋子 \(a\),並且 \(a\) 有唯一的出邊 \(b\)

所以如果一個點出度唯一,就可以將它和它的出點合併,為保證複雜度直接啟發式合併即可。

P8173 「CEOI2021」 Newspapers

比較困難的樹上博弈。

考慮手算一下長度為 \(5\) 的鏈。

不難發現最優策略就是 \(2,3,4,4,3,2\)

,這給了我們很大的啟發。

  • 1.一定不能有環,否則任意情況對方都有兩條路可走,永遠無法抓住對方。

  • 2.我們查詢的過程類似於在樹上移動,每次可以將路徑上的點排除。一定是在相鄰點上移動,否則如果對方在跳過的那個點上,你就永遠不知道他的位置。

  • 3.我們需要掃兩遍,因為如果將樹黑白染色,掃一遍只能排除一種顏色。

所以對於鏈的情況,一定有解且解為 \(2\to n -1,n-1\to 2\),共 \(2n-2\) 次詢問,可以得到 \(8\) 分。

擴充套件一下,如果鏈的某個節點上再接上一段會發生什麼變化。

如果接上的是一個點,那麼答案不會變化,因為該節點和連線的鏈上節點顏色相反,所以不是在第一遍被排除就是在第二遍被排除。

如果接上的鏈是兩個點,那麼我們只用多進行兩次判斷即可。

就是 \(1\to A\to3\to A\to 2\)\(2\to A\to 3\to A\to 1\)

如果接更多的節點呢,驚奇的發現我們不能更深入 \(4\) 號節點。

如果我們到達 \(4\) 號,再回到 \(A\),那麼進行 \(3\to 4\to 3\) 三次操作。這個時候如果對手在 \(P\) 或者 \(Q\) 號節點上,三次操作足夠對方跨過 \(A\) 到達另一邊。那麼自己回到 \(A\) 的時候根本不知道對手在哪邊,相當於前面的努力都白費了。

所以如果出現這種情況,兩邊都無法保全,只可能是無解。

這麼分析後最優解應該很清晰了,我們找到直徑,然後判斷是否有長度 \(\ge 3\)

的支鏈,然後對於長度為 \(2\) 的支鏈要多進行兩次操作進行覆蓋。

時間複雜度 \(\mathcal{O}(N)\),checker 的複雜度應該是 \(\mathcal{O}(N^2)\) 的。

P4654 [CEOI2017]Mousetrap

比較困難的樹上博弈。

先令陷阱 \(t\) 為根,我們看老鼠會怎麼決策。如果它往下走,最後會移動到葉子節點,那麼它的運動就被鎖死了,剩下的就完全在管理者的操控之內。那麼我們就試著求出 \(f_{i}\) 表示老鼠進入以 \(i\) 為根的子樹中,需要的運算元。那麼老鼠一定會選擇 \(f\) 最大的兒子,而我們一定會堵住這個兒子,所以老鼠一定會選擇次大的兒子。

如果老鼠往上走,那麼就需要考慮初始節點到根的路徑上,側接的子樹的 \(f\)。直接求顯然是不現實的,我們直接二分答案,如果子樹 \(f\) 加上在初始節點到根路徑上的運算元大於我們二分的 mid,那麼這個子樹必須被在老鼠到達之前堵住,我們讓老鼠一直向上走,看是否有充足時間堵住這些子樹。


樹/圖上博弈沒有什麼通解,是個和出題人鬥智鬥勇的過程。

比較好方法有觀察比較小的樣例/帶入當事人視角/貪心決策/動態規劃和二分思路/逆向思考結局倒推等。

思路必不能亂,畢竟出題人能想出來,說明題目的複雜性還是人力可及的。