我的问题的答案可能是显而易见的,我在纸面上知道这个明显的答案。我的意思是说到一些例子我理解为什么我们不允许循环来运行最低公共祖先算法,但我在理解为DAG中的LCA解决方案而写的论文时遇到了问题。所以解决方案的哪一部分阻止我们在循环图上使用它..
我愿意知道并感谢被告知:
在我的问题中,找到他们的LCA的节点对不在一个循环中,所以我认为可能有办法解决这个问题。
提前致谢
答案 0 :(得分:0)
循环问题始于定义本身。
u
和v
的LCA定义为z
z
可以从u
和v
访问的一组此类节点z
并且无法从任何其他节点z'
访问z'
,以便u
和v
可以访问1->2->3
。
它可能不存在于循环图中。例如,如果有一个周期4->3
以及另外两个节点和边缘:5->3
和4
,则5
和1, 2
没有LCA (因为所有3
和u
都可以从这两个地方访问,但它们也可以相互访问)。
您可以找到可从v
和z
(使用dfs或其他内容)访问的所有节点,然后检查是否存在可从两者访问的节点{{1}}它们不是来自满足这个条件的任何其他节点(它可以在多项式时间内工作)。
所以它更多的是关于有一个有意义的最低共同祖先的定义而不是能够计算它(如上所示,你可以计算类似的东西,但它甚至可能没有意义不在同一周期的节点)。