void dfs1(int u,int pre,int step)
{
dep[u]=step;
fa[u]=pre;
num[u]=1;
for(int i=head[u];i!=-1;i=edge[i].next)
{
int v=edge[i].to;
if(v!=pre)
{
val[v] = edge[i].w;
dfs1(v,u,step+1);
num[u]+=num[v];
if(son[u]==-1 || num[v]>num[son[u]])
{
son[u]=v;
}
}
}
}
void dfs2(int u,int pre)
{
top[u]=pre;
p[u] = pos++;
fp[p[u]]=u;
if(son[u]== -1) return;
dfs2(son[u],pre);
for(int i=head[u];i!=-1;i=edge[i].next)
{
int v=edge[i].to;
if(v!=son[u] && v!=fa[u])
{
dfs2(v,v);
}
}
}
樹剖模板
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.