beet's soil

競プロのことなど

木のu-vパスでuからv側にひとつ動いた頂点を求めるクエリ

このクエリをverifyできるAOJ/yukicoderの問題を探しています

アルゴリズム

まずは O(NlogN) の前計算で level ancestor を O(1) で求められるようにしておきます

depthudepthv のとき、求める頂点は paru です

depthu<depthv のとき、l=la(v,depthvdepthu1) として、求める頂点は parl=u なら l、そうでなければ paru です

クエリ当たりの計算量は O(1) です

実装例

next beet-aizu.github.io

問題例

codeforces.com