loj6669 Nauuo and Binary Tree 题解

https://loj.ac/p/6669


赛时做法

\(n-1\) 次问出深度

逐层考虑。slv(vector<int> a,vector<int> b) 表示在点集 \(a\) 中寻找 \(b\) 中点的父亲,询问 \(a[0]\)\(b\) 中所有点的距离分治下去

复杂度不会算,印象中过了

树剖

oiwiki

类似「即时战略」的 LCT 做法

考虑挂叶子(深度从小到大),此时根链已经确定了。重链剖分,询问该点和重链底的距离即可确定从哪个点离开重链,而二叉树最多只有一个轻儿子

时间复杂度 \(O(n^2)\),交互次数 \(O(n\log n)\)
具体的,设 \(T(n)\) 表示在 \(n\) 个点的树中挂一个叶子的交互次数,有 \(T(1)=0,T(n)=T(\lfloor\frac{n-1}{2}\rfloor)+1\)。总交互次数为 \(2999+\sum_{i=1}^{2999}T(i)\)

posted @ 2024-08-07 22:30  ft61  阅读(9)  评论(0编辑  收藏  举报