最近公共祖先 算法总结
现知LCA算法有倍增、Tarjan、树链剖分
再LCA问题上各自的特点如下表
倍增 | Tarjan | 树链剖分 | RMQ | |
---|---|---|---|---|
数组 | fa[u][i], dep | fa, vis, query, ans | fa, dep, size_tree, heavy_child, top_chain | st[2*N][k], dep, pos |
思路 | 深搜打表,跳跃查询 | 深搜回溯,离线查询 | 二重深搜打表,跳跃查询 | 深搜序列,ST查询 |
时间复杂度 | O((n+m)logn) | O(n+m) | O(n+mlogn) | O(nlogn+m) |
链接 | https://www.cnblogs.com/V-sama/p/17365882.html | https://www.cnblogs.com/V-sama/p/17367135.html | https://www.cnblogs.com/V-sama/p/17369701.html | https://www.cnblogs.com/V-sama/p/17375464.html |