樹論

bluewindde發表於2024-03-30

樹的括號序列

樹的括號序列一般有兩種定義:

  1. 邊的括號序列,即從根節點開始,左括號表示當前節點向下出現一條邊,右括號表示回退到父節點。例題為後文的 Tree Generator™;
  2. 點的括號序列,即 DFS 時進入節點為左括號,退出節點為右括號。應用:樹的最小表示法判定樹同構

CF1149C Tree Generator™

題意 初始給定樹的邊的括號序列,每次交換兩個位置的括號,保證交換後仍是一顆樹,問每次得到的括號序列對應的樹的直徑。

引理 若從序列中任取一段連續子序列,從中去掉所有匹配括號後,剩下的括號組成的路徑一定為一條鏈,鏈長為剩下的子序列長。

推論 樹上直徑長度即為任意區間去掉匹配括號後的長度的最大值。

不妨令左括號權值為 \(1\),右括號權值為 \(-1\)

定理 最長去匹配區間權值 = 最大的後半段的權值和 - 前半段的權值和。

接下來的部分交給線段樹,詳見題解。

引用與參考

  1. 題解 CF1149C 【Tree Generator™】 - KaisuoShutong

點分治和點分樹

點分治是對樹上的點進行分治,處理樹上路徑資訊。點分治每次選定一個節點,處理所有經過它的路徑的資訊,然後邏輯刪除該節點,遞迴處理子樹。為保證時間複雜度,每次選定的點是重心,因此時間複雜度為 \(O(n \log n)\)

點分樹是將點分治每次選定的中心連線,得到的一棵新的樹,該樹的深度不超過 \(O(\log n)\),所以允許多次修改和詢問。點分樹要求原樹的形態固定。

CF1192B Dynamic Diameter

題意 給定一棵帶邊權樹,每次修改邊權,輸出樹的直徑。

一種可能的實現:邊權轉點權,建立點分樹。然後……

推薦閱讀

簡單樹論 - qAlex_Weiq - 部落格園

相關文章