⚠️ケバブ会で概略を話してしまったので気持ち行間多めになるかもしれません.

⚠️実は今日紹介する内容 HLD って言わないのかもしれません???

木(Tree)

$n$ 頂点 $n-1$ 辺の単純連結グラフ. 同値な定義としてサイクルのない単純連結グラフと言っても良い.

適当に頂点を一つ**根(root)として決めると根付き木(rooted tree)**と呼ばれるものになり,各頂点について親(parent),子(son),子孫(descendant),祖先/先祖(ancestor),深さ(depth),部分木(subtree)などの概念が定義される.

多くの場合根は重心とか中心とか特に考えず適当にとって良い(2倍程度の差しかないので)

木の任意の二頂点 $u,v$ について $u,v$ を結ぶ単純パスは常にちょうど一つ存在し $uv$パス と呼ぶ.

Heavy Light Decomposition

略称は HLD,日本語だとHL分解,重軽分解.

概略

$n$ 頂点の木に対して $[n]\coloneqq \{1,\dots,n\}$ の順列 id を生成する.

この id 上では木の任意のパスの頂点集合が高々 $2\log_2 n$ 個の区間の和で表せる.

嬉しさ

区間クエリが $T$ 時間で解けるならパスクエリが $2T\log n$ 時間で解ける(ことが多い).

例えば「一点更新・区間総和」の問題はセグメント木を用いてクエリあたり $O(\log n)$ で解ける.

Library Checker