标签:
转自http://i.cnblogs.com/EditPosts.aspx?opt=1;很容易懂
1. DFS预处理出所有节点的深度和父节点
void dfs(int u)
{
int i;
for(i=head[u];i!=-1;i=next[i])
{
if (!deep[to[i]])
{
deep[to[i]] = deep[u]+1;
p[to[i]][0] = u; //p[x][0]保存x的父节点为u;
dfs(to[i]);
}
}
}
2. 初始各个点的2^j祖先是谁 ,其中2^j(j=0...log(该点深度))倍祖先,1倍祖先就是父亲,2倍祖先是父亲的父亲......。
标签:
原文地址:http://www.cnblogs.com/fighting-to-the-end/p/5017750.html