java_day20

目标:Java web开发

问题树的重心

import java.util.*;
public class Main {
    static final int N=(int)1e5+10,M=N<<1,INF=(int)1e9;
    static int n,idx,min=INF;
    static int[] h=new int[N],e=new int[M],ne=new int[M];
    static boolean[] status=new boolean[N];
    static Scanner sc=new Scanner(System.in);
    static void add(int u,int v) {
        e[idx]=v;
        ne[idx]=h[u];
        h[u]=idx++;
    }
    static int dfs(int u){
        status[u]=true;
        int s,sum=1,max=-INF;
        for (int i=h[u];i!=-1;i=ne[i]){
            if(status[e[i]]) continue;
            s=dfs(e[i]);
            max=Math.max(max,s);
            sum+=s;
        }
        max=Math.max(max,n-sum);
        min=Math.min(min,max);
        return sum;
    }
    public static void main(String[] args){
        n=sc.nextInt();
        for(int i=1;i<=n;++i) h[i]=-1;
        for(int i=1;i<n;++i){
            int u=sc.nextInt(),v=sc.nextInt();
            add(u,v);add(v,u);
        }
        dfs(1);
        System.out.print(min);
    }
}
posted @ 2021-07-28 21:59  zhuangzhongxu  阅读(41)  评论(0)    收藏  举报