预处理出f[i][j] 表示j 点往上走2i 步到达的点。
f[0][j]=father[j]
f[i][j]=f[i-1][f[i-1][j]]
预处理时间复杂度O(n log n)
假设我们要求x 和y 的LCA。
将x 和y 中深度较大的那个往上跳到和另一个深度相同。
再同时向上倍增枚举一个2 的幂的步长2i,若x 往上走2i
步与y 往上走2i 步不为同一个点,则将它们同时往上走2i
步。
这时只有两种情况:x = y 或
lca(x; y) = father[x] = father[y]。
查询时间复杂度O(log n)
LCA 倍增
最新推荐文章于 2024-01-28 17:16:43 发布