![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
倍增
马角的逆袭
很菜的菜鸡
展开
-
leetcode 5188 树节点的第 K 个祖先 倍增
题意 : 多次询问一个树节点往上跳KKK步会到达那个节点,超出根输出−1-1−1基础倍增,我居然蠢到把图给重新建出来…用跳表记录当前点向上跳21,22,23,....2k2^1,2^2,2^3,....2^k21,22,23,....2k步会到那个点即可关键公式 : up[u][i]=up[ up[u][i−1] ][i−1]up[u][i]=up[~~~up[u][i-1]~~~][i-1]up[u][i]=up[ &nb原创 2020-06-14 13:57:39 · 172 阅读 · 0 评论 -
牛客 小米 小米Git LCA最近公共祖先 倍增
这道题很明显的LCA了一般求LCA方法先建树,求U,VU,VU,V的LCALCALCA如果U和VU和VU和V深度不相同,先把深的那个点向上爬到同一层如果已经跳到相同层了,就U,VU,VU,V一起向上跳,直到U==VU==VU==V2. 倍增求LCA O(nlogn)O(nlogn)O(nlogn)在1的基础上改进,引入了一个预处理好的表来记录往上跳20,21,22...2k2^0,2^1,2^2...2^k20,21,22...2k步的祖先需要先dfsdfsdfs把这个表预处理出来原创 2020-06-11 21:37:20 · 170 阅读 · 0 评论 -
7-6 有趣的最近公共祖先问题 倍增
给出一颗二叉树的后序遍历和中序遍历,你能计算出两个结点的最近公共祖先吗?输入格式:第一行给出两个整数N(N<=10000)和M(M<=10000),分别代表二叉树的结点数和我们接下来的询问数。第二行和第三行分别给出N个整数,每个整数用空格分开,分别代表二叉树的后序遍历和中序遍历。接下来M行,每行给出两个整数,代表我们要询问的两个结点的编号a和b。输出格式:对于每个我们要求的询问:1.如果a和b中有一个或两个不在树上,输出"ERROR"。2.否则在一行中输出一个整数,表示a和b的最原创 2020-05-28 17:20:00 · 1110 阅读 · 0 评论