LCA的暴力查询
2015-09-13 18:58
113 查看
找两个结点的最近公共祖先,其实要找的就是两条链的第一次相交点
我们假设要找寻u和v的最近公共祖先,把u和v到树根的路径找出来,可以发现,他们的最近公共祖先就是两条链的第一个交点
按照这个思路来想,我们可以先dfs一次,标记每个点的时间戳,然后依据时间戳往前回溯,直到两个结点回溯的时间戳相等。这个时间戳的点就是两个点的最近公共祖先了
我们假设要找寻u和v的最近公共祖先,把u和v到树根的路径找出来,可以发现,他们的最近公共祖先就是两条链的第一个交点
按照这个思路来想,我们可以先dfs一次,标记每个点的时间戳,然后依据时间戳往前回溯,直到两个结点回溯的时间戳相等。这个时间戳的点就是两个点的最近公共祖先了
[code]#include <cstdio> #include <cstring> const int N = 510; int pre ; int LCA(int u, int v) { while (pre[u] > pre[v]) { u = pre[u]; } while (pre[u] < pre[v]) { v = pre[v]; } if (u != v) { while (pre[u] > pre[v]) { u = pre[u]; } } return u; } int main() { return 0; }
相关文章推荐
- testlink的使用步骤
- 【Linux】RedHat9.0 利用sftp传文件
- QQ简单登录
- 程序包的管理:rpm及yum
- Linux php出现中文乱码的解决方法
- 判断list1中是否包含list2元素
- POJ练习历程
- 定义Iterator遍历器取出set中的key,然后通过key的值在map中取出对应value值
- 用链表实现的多项式
- Codesys——PLCopen基本运动控制功能块的使用方法总结
- Android 中的两种请求网络资源的方式:HttpClient和HttpURLConnection
- 从C/C++到iOS,然后方向OpenGL资料
- 系统批量运维工具paramiko
- EL表达式语言
- 自己做的“代码生成器”,高手莫喷
- Apache "No services installed"问题的处理以及Apache提示 the requested operation has failed而无法启动
- 我的软件开发生涯 (10年开发经验总结和爆栈人生)
- 我的java实验
- SG定理
- Linux快速教程和图说设计模式(互联网博集)