LCA算法的理解
LCA思想:在求解最近公共祖先為問題上,用到的是Tarjan的思想,從根結(jié)點(diǎn)開始形成一棵深搜樹,非常好的處理技巧就是在回溯到結(jié)點(diǎn)u的時(shí)候,u的子樹已經(jīng)遍歷,這時(shí)候才把u結(jié)點(diǎn)放入合并集合中,
這樣u結(jié)點(diǎn)和所有u的子樹中的結(jié)點(diǎn)的最近公共祖先就是u了,u和還未遍歷的所有u的兄弟結(jié)點(diǎn)及子樹中的最近公共祖先就是u的父親結(jié)點(diǎn)。以此類推。。這樣我們在對樹深度遍歷的時(shí)候就很自然的將樹中的結(jié)點(diǎn)分成若干的集合,兩個(gè)集合中的所屬不同集合的任意一對頂點(diǎn)的公共祖先都是相同的,也就是說這兩個(gè)集合的最近公共最先只有一個(gè)。對于每個(gè)集合而言可以用并查集來優(yōu)化,時(shí)間復(fù)雜度就大大降低了,為O(n + q),n為總結(jié)點(diǎn)數(shù),q為詢問結(jié)點(diǎn)對數(shù)。
轉(zhuǎn)載于:https://www.cnblogs.com/hujunzheng/p/3945885.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: 泰国榴莲什么时间成熟?
- 下一篇: AOE网的关键路径的计算