2010-11-02 44 views
4

是否有一个内置的方法在boost中查找树中两个或更多节点的最低共同祖先(这是一个boost :: graph实例)?最低公共祖先(升压图)

如果不是,我将不胜感激关于最佳方式的建议。在O(1)时间内(有O(n)预处理)有高效的算法来实现这一点,但它没有描述算法。

+0

你在一棵树上呢? – vitaut 2010-11-02 08:07:30

+0

是的,我的意思是在一棵树上。对困惑感到抱歉。 – 2010-11-02 08:10:06

回答

2

发现在Wikipedia算法:

function TarjanOLCA(u) 
MakeSet(u); 
u.ancestor := u; 
for each v in u.children do 
    TarjanOLCA(v); 
    Union(u,v); 
    Find(u).ancestor := u; 
u.colour := black; 
for each v such that {u,v} in P do 
    if v.colour == black 
     print "Tarjan's Least Common Ancestor of " + u + 
       " and " + v + " is " + Find(v).ancestor + "."; 
相关问题