
AcWing 846. 树的重心(DFS)
发布日期:2021-05-07 14:08:37
浏览次数:24
分类:原创文章
本文共 1683 字,大约阅读时间需要 5 分钟。
给定一颗树,树中包含n个结点(编号1~n)和n-1条无向边。
请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。
重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。
输入格式
第一行包含整数n,表示树的结点数。
接下来n-1行,每行包含两个整数a和b,表示点a和点b之间存在一条边。
输出格式
输出一个整数m,表示重心的所有的子树中最大的子树的结点数目。
数据范围
1≤n≤1051≤n≤105
输入样例
91 21 71 42 82 54 33 94 6
输出样例:
4
import java.io.*;import java.lang.*;import java.util.*;class Main{ static int n = 0; static int N = 100010; static int[] h = new int[2 * N];//邻接表的数组 static int[] e = new int[2 * N], ne = new int[2 * N];//单链表 static int idx = 1; static int max = N; static boolean[] f = new boolean[N];//标记当前节点是否被访问过 static void add(int k, int n){ e[idx] = n; ne[idx] = h[k]; h[k] = idx++; } static int dfs(int p){ f[p] = true; int sum = 1, res = 0; for(int i = h[p]; i != -1; i = ne[i]){ int j = e[i]; if(!f[j]){ int s = dfs(j);//对应j 连通块的结点个数 res = Math.max(res, s);//比较所有子节点连通块的节点数 sum += s;//计算所有子连通块的节点总和 } } res = Math.max(res, n - sum);//比较上面联通块与子连通块的大小 max = Math.min(max, res); return sum; } public static void main(String[] args)throws Exception{ BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); n = Integer.valueOf(buf.readLine()); Arrays.fill(h, -1); for(int i = 0; i < n - 1; ++i){ String[] info = buf.readLine().split(" "); int a = Integer.valueOf(info[0]); int b = Integer.valueOf(info[1]); add(a, b);//创建无向图,树也是无向图的一种 add(b, a); } dfs(1); System.out.print(max); }}
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月12日 23时45分35秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
合并两个有序数组
2021-05-08
Ubuntu 环境下使用中文输入法
2021-05-08
小白学习Vue(?)--model选项的使用(自定义组件文本框双向绑定)
2021-05-08
聊聊我的五一小假期
2021-05-08
面向对象之异常处理:多路捕获
2021-05-08
Python简易五子棋
2021-05-08
MySQL8.0.19 JDBC下载与使用
2021-05-08
Windows安装MongoDB 4.2.8
2021-05-08
Vue新建项目——页面初始化
2021-05-08
Cent OS 7.6 服务器软件安装(这篇博客主要是为了方便我配置云主机的)
2021-05-08
MySQL使用系列文章
2021-05-08
Node.js包使用系列(一)——修改NPM全局下载和缓存路径
2021-05-08
TDengine使用(一)——TDengine下载与安装
2021-05-08
Node.js包使用系列(三)——常用npm包列表
2021-05-08
ubuntu和windows之间无法复制粘贴
2021-05-08
编译Linux内核--制作文件系统--远程调试程序
2021-05-08
启动加载器BootLoader
2021-05-08
力扣239. 滑动窗口最大值
2021-05-08
史上最全Vue的组件传值
2021-05-08