您的位置:首页 > 其它

shupou

2016-03-08 21:41 267 查看
#include<iostream>

#include<string.h>

#include<stdio.h>

#include<vector>

using namespace std;

const int maxx=140000;

vector<int> lin[maxx];

int deep[maxx],fa[maxx],top[maxx],in[maxx],bs[maxx];

int dfs1(int x,int pre,int d)

{

        deep[x]=d;

        fa[x]=pre;

        in[x]=++num;

        for (int i=0;i<lin[x].size();i++)

                {

                int nex=lin[x][i];

                if (fa[x]==nex) continue;

                dfs1(nex,x,d+1);

                }

        bs[x]=num-in[x]-1;

        return;

}

int dfs2(int x,int t)

{

        top[x]=t;

        in[x]=++num;

        int msize=0,hea=0;

        if (lin[x].size()==1)   return;

        for (int i=0;i<lin[x].size();i++)

                {

                int nex;

                nex=lin[x][i];

                if (fa[x]==nex) continue;

                if (bs[nex]>msize)

                        {

                        msize=be[nex];

                        hea=nex;

                        }

                }

        dfs2(hea,t);

        for (int i=0;i<lin[x].size();i++

                {

                int nex=lin[x][i];

                if (fa[x]==nex || hea==nex)     continue;

                dfs(nex,nex);

                }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: