[C++][算法基础]树的重心(树图DFS)

给定一颗树,树中包含 n 个结点(编号 1∼n)和 n−1 条无向边。

请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。

重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。

输入格式

第一行包含整数 n,表示树的结点数。

接下来 n−1 行,每行包含两个整数 a 和 b,表示点 a 和点 b 之间存在一条边。

输出格式

输出一个整数 m,表示将重心删除后,剩余各个连通块中点数的最大值。

数据范围

1≤n≤10^{5}

输入样例
9
1 2
1 7
1 4
2 8
2 5
4 3
3 9
4 6
输出样例:
4

代码:

#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;const int N = 100010;
int StartNode[N],edgeTo[N*2],NextThisNode[N*2];
int idx,n,ans;
int att[N*2];void add(int a,int b){edgeTo[idx] = b;NextThisNode[idx] = StartNode[a];StartNode[a] = idx;idx ++;
}int dfs(int x){att[x] = 1;int sum = 1;int res = 0;for(int i = StartNode[x];i != -1;i = NextThisNode[i]){int j = edgeTo[i];if(att[j] == 0){int temp = dfs(j);res = max(res,temp);sum += temp;}}res = max(n - sum,res);ans = min(res,ans);return sum;
}int main(){int a,b;cin>>n;ans = n;memset(StartNode,-1,sizeof StartNode);for(int i = 0;i < n;i++){cin>>a>>b;add(a,b);add(b,a);}dfs(1);cout<<ans<<endl;return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/610508.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

考研数学|零基础冲130复习方案+资料分享

如果想考130&#xff0c;那就一定要好好复习基础。 因为24年开始&#xff0c;考研的走向就已经发生了改变&#xff0c;考研数学开始越来越注重一下三点的考察&#xff1a; 基础知识的掌握程度计算能力解题能力 这三点环环相扣&#xff0c;每一个都要复习好才行。 在基础阶段…

Linux操作系统的学习

Linux系统的目录结构 / 是所有目录的顶点目录结构像一颗倒挂的树 Linux常用命令 常见命令 序号命令对应英文作用1lslist查看当前目录下的内容2pwdprint work directory查看当前所在目录3cd [目录名]change directory切换目录4touch [文件名]touch如果文件不存在&#xff0c;新…

《极域多媒体教室互动管理系统软件》控制方法大全

前言及背景&#xff1a; 当我坐在电脑前&#xff0c;打开它&#xff0c;点开谷歌&#xff0c;刚刚想打开百度&#xff0c;突然闪出来了&#xff1a; 该网页已被阻止&#xff01;&#xff01;&#xff01; 正文&#xff1a; 1.极域控制原理&#xff1a; 好…

猝不及防 CCF-B ICPP 2024投稿延期至4月22日提交摘要 机会来了别错过

会议之眼 快讯 第53届ICPP&#xff08;International Conference on Parallel Processing&#xff09;即国际并行处理会议将于 2024年 8月12日-15日在瑞典哥特兰岛举行&#xff01;ICPP是世界上最古老的连续举办的并行计算计算机科学会议之一。它是学术界、工业界和政府的研究…

MINI2440 开发板 给他干出来了

环境是ubuntu14.04。不要问我为什么是这个版本&#xff0c;因为之前的ubuntu12.04 环境干不出来&#xff0c;你去试试就知道了&#xff01;各种资源包下载不下来。 输入启动参数&#xff1a; 进入MINI2440&#xff1a;别说心里一万个开心&#xff0c;启动完成&#xff0c;输入p…

【工具】NPS 内网穿透搭建

背景 在日常开发中经常会涉及到使用公网某个端口进行开发调试的情况&#xff0c;但我们日常开发的机器IP是非公网IP&#xff0c;所以需要使用内网穿透的手段&#xff0c;使我们的服务在公网上能被访问到。 常用的内网穿透工具分两大类&#xff0c;一类是付费/免费服务&#xf…

git修改本地提交历史邮箱地址

1、Git&#xff08;Git&#xff09; 2、修改Git本地提交历史中的邮箱地址 使用 git rebase 命令进行交互式重置。 具体步骤如下&#xff1a;&#xff08;https://git-scm.com/docs/git-rebase&#xff09; 1、查看提交历史&#xff1a; 使用 git log 命令列出提交历史&#x…

09 Php学习:数组和排序

数组概念 在PHP中&#xff0c;数组是一种复合数据类型&#xff0c;用于存储多个值。以下是关于PHP数组的详细解释&#xff1a; 索引数组&#xff1a;索引数组是最基本的数组类型&#xff0c;其中每个元素都有一个唯一的数字索引&#xff0c;从0开始递增。 关联数组&#xff…

标注平台工作流:如何提高训练数据质量与管理效率

世界发展日益依托数据的驱动&#xff0c;企业发现&#xff0c;管理不断增长的数据集却愈发困难。数据标注是诸多行业的一个关键过程&#xff0c;其中包括机器学习、计算机视觉和自然语言处理。对于大型语言模型&#xff08;LLM&#xff09;来说尤是如此&#xff0c;大型语言模型…

【经验分享】如何一眼识破真假六西格玛培训公司?

随着六西格玛热度的不断升温&#xff0c;市场上也涌现出了形形色色的六西格玛培训公司。如何在众多培训机构中挑选出真正专业、有价值的六西格玛培训公司&#xff1f;本文将为大家揭开这一神秘面纱&#xff0c;让您轻松辨别真伪&#xff0c;找到适合自己的培训公司。 一、看背景…

【优选算法专栏】专题十六:BFS解决最短路问题(一)

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

Day96:云上攻防-云原生篇Docker安全系统内核版本漏洞CDK自动利用容器逃逸

目录 云原生-Docker安全-容器逃逸&系统内核漏洞 云原生-Docker安全-容器逃逸&docker版本漏洞 CVE-2019-5736 runC容器逃逸(需要管理员配合触发) CVE-2020-15257 containerd逃逸(启动容器时有前提参数) 云原生-Docker安全-容器逃逸&CDK自动化 知识点&#xff1…