ReRooting
(tree/rerooting.cpp)
できること
全ての頂点について、その頂点を根としたときの木DPの結果を求める
ある頂点を根としたときの部分木の結果を求めることもできる 問題 提出例
データの持ち方
-
T
: 結果
-
Edge
: 辺の情報
-
Node
: 逆辺のindexなどを管理する
つかいかた
以下のラムダ式を実装する
-
fold(x, y)
: 結果 x
と結果 y
をマージ
-
lift(x, e)
: 結果 x
を辺 e
を使って上に持ち上げる
計算量
頂点数を $N$ として $O(N \log N)$
「ある頂点を根としたときの部分木の結果」が必要なければ $O(N)$ にもできる
参考リンク
†全方位木DP†について
もうひとつの全方位木DP
Verified with
Code
Back to top page