LCA(倍增)
inline void dfs(int u, int f){
fa = f;
dep = dep + 1;
for(int i = 1; i <= 26; ++i)
fa = fa];
int v;
for(int e = hd; e; e = nt)
if((v = to) ^ f)
dfs(v, u);
}
inline int LCA(int u, int v)
{
if(dep < dep) swap(u, v);
if(u == v) return u;
for(int i = 26; i >= 0; --i)
if(dep] >= dep)
u = fa;
if(u == v) return u;
for(int i = 26; i >= 0; --i)
if(fa ^ fa)
u = fa, v = fa;
return fa;
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]