Skip to content

木構造

解の形を木構造に限定して考える

  • 木には良い性質が多いので、グラフなどの問題で、解の形を「木」に限定して探索する、など
    • 最適解が木構造になる、または、最適スコアに近いものが得られる場合でないと、形を限定するのは普通はあまり良くない
  • AHC036

分解

  • 木分解
  • 重心分解
  • Heavy-Light Decomposition

部分変更

  • 木に1辺を追加するとサイクルになるので、サイクル上の別の1辺を削除すると別の木が得られる

グリッドで木構造を考える

DFS木、BFS木

  • 各頂点に1回だけ訪問するようにグラフを深さ優先探索順か、幅優先探索順かで辿ったときに使った辺でできる木
  • 巡回方法(2分木の場合)
    • 行きがけ順(pre-order)
      • DFSで、今の頂点、子の頂点、の順で処理
    • 通りがけ順(in-order)
      • DFSで、左の子、今の頂点、右の子の順で処理
    • 帰りがけ順(post-order)
      • DFSで、子の頂点、今の頂点の順で処理
    • レベル順(level-order)
      • BFS

全域木

  • クラスカル法、プリム法

最短経路木(Shortest-path tree)

最小シュタイナー木

オイラーツアーテクニック

  • 木の辺を2つの有向辺とみなしてオイラー閉路をDFSで作り、通過した辺を順番に配列にメモる
  • 部分木が、メモした配列の連続区間に対応する
  • ビームサーチで、状態遷移の過程をオイラーツアーの木で持って処理するなどにも使える