树的重心(树与图的深度优先遍历) C++实现

#include
#include
using namespace std;
const int N=100010,M=N*2;
int n;
int h[N],e[M],ne[M],idx;
int ans=N;
bool st[N];

void add(int a,int b){
    e[idx] = b;
    ne[idx] = h[a];
    h[a] = idx++;
}


int dfs(int u){
    st[u]=true;
    int sum=1,res=0;
    
    for(int i=h[u];i!=-1;i=ne[i]){
        int j=e[i];
        if(!st[j]){
            int s=dfs(j);
            sum += s;
            res = max(res,s);
        }
    }
    res = max(res,n-sum);
    ans=min(ans,res);
    return sum;
}

int main(){
    scanf("%d",&n);
    memset(h,-1,sizeof h);
    
    for(int i=0;i

你可能感兴趣的:(深度优先,c++,图论,算法,链表,数据结构)