好像LCA的题目并不多,现在就做了10道左右,但是找不到别的了,在此做个小总结,将来有更好的题目会不断更新
解决LCA问题,一般用3种方法
1.朴素方法:两个点都一直沿路径往上走,直到有某一个节点被经过两次并且是第一次出现这样的点,那么这个就是LCA
此方法最好理解,但是用得不多,但不代表没作用,有些题目还是需要用到的
2.LCA转RMQ(在线算法):一般是将LCA转为RMQ问题,用ST算法求解,当然求解RMQ问题有很多方法,不过ST比较常用而已,这样做能及时回答每一个询问
3.Tarjan算法(离线算法):利用Tarjan算法,不过要先读入所有询问再一并回答,建议认真学习Tarjan算法本质
3.hdu 2874 Connections between cities
需要判断是否同在一个集合中
修改点权值
修改边权值,树状数组优化
先用并查集缩点
并查集应用