树剖模板

来源:互联网 发布:广场舞视频下载软件 编辑:程序博客网 时间:2024/05/16 09:50
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);        }    }}