2010年5月26日
摘要: 第一道LCA [代码] 阅读全文
posted @ 2010-05-26 22:09 keep going 阅读(356) 评论(0) 推荐(0) 编辑
摘要: 最近公共祖先(LCA)问题LCA(T,u,v):在有根树T中,询问一个距离根最远的结点x,使得x同时为结点u、v的祖先LCA问题可以用朴素的DFS方法解决,但是时间复杂度就很高了,这里介绍一种高级一点的解决LCA问题的Tarjan算法。Tarjan算法是由Robert Tarjan在1979年发现的一种高效的离线算法,也就是说,它要首先读入所有的询问(求一次LCA叫做一次询问),然后并不一定按照原... 阅读全文
posted @ 2010-05-26 21:48 keep going 阅读(3989) 评论(1) 推荐(0) 编辑
摘要: LCA是求最近公共祖先问题, tarjan的算法是离线算法,时间复杂度为O(n+Q),n为数据规模,Q为询问个数其中用到并查集。关键是dfs的主循环比较重要。离线算法就是对每个查询,都要求以下,此算法在lrj的黑书中简单提起过,后边还有O(n)-o(1)的算法,正在研究中。。。分类,使每个结点都落到某个类中,到时候只要执行集合查询,就可以知道结点的LCA了。 对于一个结点u,类别有 以u为根的子树... 阅读全文
posted @ 2010-05-26 21:37 keep going 阅读(739) 评论(0) 推荐(0) 编辑