算法刷题笔记 树的重心(树的优先遍历,C++实现)

文章目录

    • 题目描述
    • 基本思路
    • 实现代码

题目描述

  • 给定一颗树,树中包含n个结点(编号1∼n)和n−1条无向边。
  • 请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。
  • 重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。

输入格式

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

输出格式

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

数据范围

  • 1 ≤ n ≤ 10^5

基本思路

  • 本题仍然采用树的深度优先搜索算法进行实现。
  • 每次移除树中的一个点,可以将树分为多个部分,分别是树的多棵子树和一个连通块。只需要比较这些子树和连通块的大小即可。

实现代码

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;// 输入的树的结点个数
int n;const int N = 100010;
vector<int> adjacent_table[N];   // 充当邻接表的向量数组
bool visited[N];                 // 判定结点是否遍历过的数组
int tree_size[N];                // 以每一个结点作为根节点的子树大小
int result = N ;                 // 记录最终的返回结果// 基于深度优先搜索算法的函数
void dfs_search(int current)
{// 标记当前结点,表示其已经被遍历过visited[current] = true;// 将初始的子树大小设置为1(只有自己)tree_size[current] = 1;// 通过邻接表找到当前结点的所有子结点,递归地计算这些子节点的子树规模int max_treesize = 0;for(int child : adjacent_table[current]){// 如果当前的子节点还没有被访问过的情况if(visited[child] == false){// 递归地通过深度优先搜索对其进行访问dfs_search(child);// 修改当前结点的子树规模tree_size[current] += tree_size[child];// 比较当前子树规模和该结点当前的最大子树规模max_treesize = max(max_treesize, tree_size[child]);}}// 修改当前时刻的结果result = min(max(max_treesize, n - tree_size[current]), result);
}int main(void)
{// 输入树的结点个数scanf("%d", &n);// 输入每一条边,注意点的下标从1开始且是双向边for(int i = 0; i < n - 1; ++ i){int a, b;scanf("%d%d", &a, &b);adjacent_table[a].push_back(b);adjacent_table[b].push_back(a);}// 通过深度优先搜索算法函数获取最终结果dfs_search(1);// 输出最终结果printf("%d", result);return 0;
}

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

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

相关文章

掌握SQL Server性能监控:自定义性能计数器的实现

掌握SQL Server性能监控&#xff1a;自定义性能计数器的实现 在数据库管理中&#xff0c;监控数据库性能是确保系统稳定运行的关键。SQL Server提供了丰富的性能监控工具&#xff0c;但有时这些工具可能无法满足特定的监控需求。这时&#xff0c;自定义性能计数器就显得尤为重…

JVM监控及诊断工具-命令行篇-jstack命令介绍

加粗样式 JVM监控及诊断工具-命令行篇04-jstack&#xff1a;打印JVM中线程快照 一 基本情况二 基本语法 一 基本情况 jstack(JVM Stack Trace)&#xff1a; 用于生成虚拟机指定进程当前时刻的线程快照(虚拟机堆栈跟踪)。 线程快照就是当前虚拟机内指定进程的每一条线程正在执…

Scrcpy adb server version (41) doesn‘t match this client (39); killing...

通过Snap 在Ubuntu上安装 scrcpy之后&#xff0c;启动会导致无法同时 scrcpy和adb logcat 过滤日志 目前最新的安装的platforms-tools下面的adb 版本最新都是 adb 41版本 解决办法&#xff1a; 在这里链接里面 下载 adb 1.0.39 版本&#xff0c;替换 /home/host/Android/Sdk/…

新手小白的pytorch学习第七弹------分类问题模型

目录 1. 准备分类数据1.1 输入和输出的形状 shape1.2 将数据转换为张量&#xff0c;同时将我们的数据集转换为训练集和测试集 2 创建模型方法一&#xff1a;自定义forward()方法二&#xff1a;nn.Sequential()方法三&#xff1a;自定义forward()nn.Sequential() 用 pytorch 使用…

基于A律压缩的PCM脉冲编码调制通信系统simulink建模与仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1A律压缩的原理 4.2 PCM编码过程 4.3 量化噪声与信噪比 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#…

python项目读取oracle数据库方法(cx_Oracle库实现)

目录 创建一个python项目&#xff0c;并配置运行环境 查看oracle对应数据库版本&#xff08;该标题下内容只是为了查看版本&#xff0c;不用在意&#xff09; 从oracle官网下载对应版本的oracle客户端 解压下载的压缩包&#xff0c;并获取依赖 将依赖文件导入python项目运…

82. UE5 RPG 实现角色升级系统(下)

书接上回&#xff0c;在上一篇博客里&#xff0c;我们实现了角色升级的基础的功能。给敌人增加的经验奖励配置&#xff0c;并且在敌人死亡时&#xff0c;能够将经验通过事件传递给击杀者&#xff0c;玩家定义了被动技能&#xff0c;在被动技能中接收传递的事件&#xff0c;通过…

iOS 开发包管理之CocoaPods

CocoaPods&#xff08;Objective-C 时期&#xff0c;支持Objective-C和swift&#xff09;&#xff0c;CocoaPods下载第三方库源代码后会将其编译成静态库.a 文件 或动态库框架.framework 文件 的形式&#xff0c;并将它们添加到项目中&#xff0c;建立依赖关系&#xff0c;这种…

Redis实现用户会话

1.分布式会话 (1)什么是会话 会话Session代表的是客户端与服务器的一次交互过程&#xff0c;这个过程可以是连续也可以是时断时续的。曾经的Servlet时代&#xff08;jsp&#xff09;&#xff0c;一旦用户与服务端交互&#xff0c;服务器tomcat就会为用户创建一个session&#…

开源PDF解析工具marker 和 MinerU的解析效果对比

RAG中的文档解析需求&#xff1a;需要的是文档的完整段落&#xff0c;标题&#xff0c;图片&#xff0c;表格。我们希望删除的是md格式&#xff0c;或者josn格式。 MinerU 和 maker恰好。都是能够满足此需求的开源工具。这篇文章分享一下对两者的对比。整理出来目前还存在的问题…

RPG素材Unity7月20闪促限时4折游戏开发资产兽人角色模型动画休闲放置模板物理交互流体水下焦散VR界面UI2D模板场景20240720

今天这个是RPG素材比较多&#xff0c;还有一些休闲放置模板、FPS场景素材、角色模型、动画、特效。 详细内容展示&#xff1a;www.bilibili.com/video/BV1Tx4y1s7vm 闪促限时4折&#xff1a;https://prf.hn/l/0eEOG1P 半价促销&#xff1a;https://prf.hn/l/RlDmDeQ 7月闪促…

可再生能源工厂系统 (REPS) - 项目源码

狗头警告,这是VIP文章! 说明: 文件1: REPS_2024.pdf 可再生能源工厂系统 (REPS) 概述 可再生能源工厂 (REP) 是一个多代能源系统工厂,负责为城市、工业等生产可再生能源。可再生能源通常在世界各地的任何地点都可获得,具体取决于类型。此外,与常规能源相比,使用可再生…

【Flask项目】文件分享系统(二)

前一篇文章简单分析了基于Flask的文件分享系统&#xff0c;功能设计的很简单&#xff0c;就是浏览目录&#xff0c;支持文件的上传和下载&#xff0c;那么用flask该如何来实现呢&#xff0c;其实也很简单。 一个Flask程序必须包含实例、路由、视图函数、响应&#xff0c;才能正…

探索Perl的文件系统插件:灵活的系统扩展

探索Perl的文件系统插件&#xff1a;灵活的系统扩展 Perl是一种高度灵活和强大的脚本语言&#xff0c;它提供了丰富的API来处理文件和目录。文件系统插件机制是Perl中一个非常有用的功能&#xff0c;它允许开发者通过插件扩展文件系统的功能。本文将详细介绍如何在Perl中使用文…

谷粒商城实战-Vue学习过程中踩坑记录

一&#xff0c;自闭合的<script>标签 第一次使用Vue&#xff0c;按照步骤引入vue.js&#xff0c;创建div&#xff0c;创建Vue对象&#xff0c;但是未达预期效果。 插值表达式{{name}}没被替换为data对象中的属性值。 F12看了下网页源代码&#xff0c;发现创建Vue对象的…

OpenAI突发新模型GPT-4o mini,GPT-3.5退役!

OpenAI突发新模型&#xff0c;全面取代老去的GPT-3.5——GPT-4o mini&#xff01; 免费用户已可使用GPT-4o mini模型。 GPT-4o mini&#xff0c;能力接近原版GPT-4&#xff0c;价格却要便宜一个数量级&#xff1a; GPT-4o mini:每百万输入tokens&#xff0c;15美分&#xff0…

JVM工具实战:线上问题排查与性能分析

文章目录 jps&#xff1a;java 进程获取jstat&#xff1a;虚拟机统计信息监视工具jinfo&#xff1a;java 配置信息工具jmap&#xff1a;java 内存映像工具jstack&#xff1a;Java 堆栈跟踪工具 在程序运行过程中&#xff0c;我们可能会遇到各种问题&#xff0c;而稳定性风险是我…

RabbitMQ线程和连接模型详解

1. 线程、信道、连接、请求的概念 客户端&#xff08;生产者&#xff09;和服务端&#xff08;服务端&#xff09;之间建立连接。例如TCP连接&#xff0c;是一个长连接&#xff0c;也是较为稳定的连接&#xff0c;开销也较大。一般而言主客户端之间需要一个连接。但服务器需要…

【Node.js基础03】利用http模块创建Web服务

一&#xff1a;使用步骤 1 加载http模块&#xff0c;并创建Web服务程序 2 利用Web服务程序监听request事件&#xff0c;设置响应头和响应体 3 配置端口号并启动Web服务 4 浏览器请求设置的端口号&#xff0c;进行Web服务程序测试 二&#xff1a;简单应用 const http requir…

基于多线程延迟排序的睡眠排序算法的创新与改进

基于多线程延迟排序的睡眠排序算法的创新与改进 摘要 本文在传统睡眠排序算法的基础上&#xff0c;提出了一种改进方案&#xff0c;旨在优化处理负数和大规模数据集的性能。通过引入线程池管理和数据分段排序技术&#xff0c;改进后的算法在处理大数据集和包含负数的数据集时…