top-tree実装体験木
読者層が限定されすぎていませんか?
Link Cut Treeを書いたことがない人はこちら!
部分木クエリについてはこちら!
Link Cut Treeで部分木の情報を管理する - beet's soil
最遠点クエリについてはこちら!
え〜っと, 多分toptreeが書けました. 多分! verifyしたいんですが, Rustのバージョンで困っています…
# 実装
論文を読むとかける!(素振り) 間違ってたらごめんなさい
LinkCutTreeがならしO(logN)らしいし, これもO(logN)だと信じている(解析できねえ…)
# 読んだもの
- Maintaining Information in Fully-Dynamic Trees with Top Trees
- Design and Analysis of Data Structures for Dynamic Trees
- noshi91さんのツイート
# toptree?
LinkCutTreeでは, Heavy-edgeのパスを頂点の順番でSplayTreeで管理していました. また, 上のLinkCutTreeでの部分木クエリでは, Light-edgeでつながったものを, multisetで管理しています.
これを, Heavy-edgeのパスを辺の順番で, 辺を葉とするSplayTreeで管理し, Light-edgeでつながったものをSplayTreeでまとめたデータ構造が, TopTreeの雑な説明です. このSplayTreeにクエリを処理させれば, 部分木クエリなどができます. link, cutもできます.
ここでもっと雑な説明をしてしまうとTopTreeが分からなくなってしまいそうなので, 他の記事にゆっくりまとめたいと思います… まとめる時間をください…(学業がなくなれば)
# 実際にできたクエリ
TopTreeにはClusterを載せてクエリを処理させます. ClusterのTraitは以下のようになっています.
|
|
# v-uパスの長さ
|
|
というふうにClusterを定義すると
|
|
# 木の直径クエリ
|
|
というふうにClusterを定義すると
|
|
AOJの直径のやつ適当にいくつか通しました(提出できない)
# 最遠点クエリ
|
|
というふうにClusterを定義すると
が解けます. サンプルは通りました(AtCoderさんverifyさせてくださいおねがいします)
|
|
Nearest Marked Vertex Queryはまだやってない.
何が載るのかはさっぱりわかりません, だれか解明して.