这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 | |||
2021-2022:teams:aaub:2021.8.02_牛客6 [2021/08/03 17:24] prime21 [E: Growing Tree] |
2021-2022:teams:aaub:2021.8.02_牛客6 [2021/08/03 17:27] (当前版本) hugegun [E: Growing Tree] |
||
---|---|---|---|
行 57: | 行 57: | ||
$n \log^2 n$ 做法,开颜色棵splay,splay的顺序为当前树的dfs序,那么子树问题变成splay上一段区间的查询问题,而子树查询还需要知道子树对应的区间的结尾和开头各是哪里,注意到$u$子树内一点$v$满足$lca(u,v) = u$,用这个性质可以寻找dfs序上最后一个满足该性质的点,故在splay上二分查询满足lca性质的最后一个点即可解决问题。 | $n \log^2 n$ 做法,开颜色棵splay,splay的顺序为当前树的dfs序,那么子树问题变成splay上一段区间的查询问题,而子树查询还需要知道子树对应的区间的结尾和开头各是哪里,注意到$u$子树内一点$v$满足$lca(u,v) = u$,用这个性质可以寻找dfs序上最后一个满足该性质的点,故在splay上二分查询满足lca性质的最后一个点即可解决问题。 | ||
+ | 分块:设置块大小$BLK$,暴力建树、查询,树大小超过$BLK$就把这部分按dfs序加到序列中,查询时按$u$在树中和序列中两种情况处理。(邻接表用vector太慢了,实际上和log^2差不多) |