当前位置: 首页 > news >正文

算法板子:树形DP、树的DFS——树的重心

思想:

在这里插入图片描述

代码:

#include <iostream>
#include <cstring>
using namespace std;const int N = 1e5 + 10;// vis标记当前节点是否被访问过; vis[1]=true代表编号为1的节点被访问过
bool vis[N];
// h数组为邻接表; h数组上的每个坑位都串了一个单链表; h[1]=3代表编号为1的节点的第一个邻接节点的编号为3
// e[i]代表编号为i的节点的值; ne[i]代表编号为i的节点的下一个节点的编号; idx代表当前可用编号; 注意这里的e和ne数组要开2*N的大小
int h[N], e[2 * N], ne[2 * N], idx;// res存储去掉各个节点后的最大连通块的最小值; 初始记录为最大值,最大值为最大连通块的点数,就是树中所有的节点数
int n, res = N;// 值为a的节点和值为b的节点之间存在一条边,在以a打头的单链表上插入头结点b
void add(int a, int b)
{e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}// 得到以u为根的树的总节点数
int dfs(int u)
{vis[u] = true; // 标记u节点已经访问过int size = 0; // 代表以u为根的最大子树的节点数; 初始时最大子树节点数为0int sum = 1; // 代表以u为根的树的总节点数; 初始时该树的总节点数为1// 遍历u节点的邻居; 也就是遍历u的每个儿子for (int i = h[u]; i != -1; i = ne[i]){int j = e[i]; // 得到u节点的邻居节点,也就是u的儿子if (vis[j]) continue; //避免叶子结点找到的邻居节点为父节点int s = dfs(j); // 得到以某个儿子节点为根的树的总节点数; 也就是某个子树的节点数size = max(size, s); // 更新最大子树节点数sum += s; // 累加所有子树的节点数}// 如果删掉了u这个点,那么整个树可以分成两部分,u的所有子树和u的上面的剩余部分// u的所有子树的最大节点数为size,剩余部分为整棵树的总节点数减去以u为根的树的节点数,求max后得到删去u后连通块中的最大节点数// 再和删去其他节点的答案作比较,更新最小的最大连通块的点数res = min(res, max(size, n - sum));return sum;
}int main()
{cin >> n;// 首先要初始化邻接表hmemset(h, -1, sizeof h);// 将输入的点构成邻接表for (int i = 0; i < n - 1; i ++ ){int a, b;cin >> a >> b;// 比如a=1 b=3,代表值为1的节点和值为3的节点之间存在边; 那么1的单链表后面要串个3,3的单链表后面要串个1add(a, b); add(b, a);}// 从树中的任意一个节点开始dfs都可以; 比如也可以是dfs(n-1)dfs(1);cout << res << endl;return 0;
}

相关文章:

算法板子:树形DP、树的DFS——树的重心

思想&#xff1a; 代码&#xff1a; #include <iostream> #include <cstring> using namespace std;const int N 1e5 10;// vis标记当前节点是否被访问过; vis[1]true代表编号为1的节点被访问过 bool vis[N]; // h数组为邻接表; h数组上的每个坑位都串了一个单链…...

在C语言中,联合体或共用体(union )是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型。

在C语言中&#xff0c;union 是一种特殊的数据类型&#xff0c;允许在相同的内存位置存储不同的数据类型。这意味着 union 中的所有成员共享同一块内存空间&#xff0c;因此它们之间会相互覆盖。在你给出的 Acceleration_type union 定义中&#xff0c;包含了三种不同类型的成员…...

MS2201以太网收发电路

MS2201 是吉比特以太网收发器电路&#xff0c;可以实现超高速度的 全双工数据传输。它的通信遵从 IEEE 802.3 Gigabit Ethernet 协议 中的 10 比特接口的时序要求协议。 MS2201 支持数据传输速率从 1Gbps 到 1.85Gbps 。 主要特点 ◼ 电源电压&#xff1a; 2.5V 、 3.3V …...

乐乐音乐Kotlin版

简介 乐乐音乐Kotlin版&#xff0c;主要是基于ExoPlayer框架开发的Android音乐播放器&#xff0c;它支持lrc歌词和动感歌词(ksc歌词、krc歌词、trc歌词、zrce歌词和hrc歌词等)、多种格式歌词转换器及制作动感歌词、翻译歌词和音译歌词。 编译环境 Android Studio Jellyfish | …...

C语言——预处理和指针

C语言——预处理和指针 预处理宏宏定义宏的作用域带参的宏 文件包含条件编译 指针指针的概念指针的定义指针变量初始化指针一维整型数组 预处理 编程的流程分为&#xff1a;编辑、编译、运行、调试四个阶段&#xff1b; 预处理属于编译阶段&#xff0c;编译过程又可以分为&…...

iptables防火墙(一)

目录 1、Linux防火墙基础 2、iptables的四表五链结构 2.1 iptables的四表五链结构介绍 2.2 四表五链 2.2.1 四表 2.2.2 五链 2.3 包过滤的匹配流程 2.3.1 规则链之间匹配顺序 2.3.2 规则链内部的处理规则 2.3.3 数据包过滤的匹配流程 3、 编写防火墙规则 3.1 iptabe…...

(leetcode学习)50. Pow(x, n)

实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;xn &#xff09;。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&#xff1a;1024.00000示例 2&#xff1a; 输入&#xff1a;x 2.10000, n 3 输出&#xff1a;9.26100示例 …...

QT 5.12.0 for Windows 安装包 QT静态库 采用源码静态编译生成

qt-5.12.0-static.zip 下载地址(资源整理不易&#xff0c;下载使用需付费&#xff0c;且文件较大&#xff0c;不能接受请勿浪费时间下载): 链接&#xff1a;https://pan.baidu.com/s/1ftfHFG_jGFwVaOAvBVrNFg?pwdtvtp 提取码&#xff1a;tvtp...

【生成式人工智能-三-promote 神奇咒语RL增强式学习RAG】

如何激发模型的能力 提示词 promotCoTRL 增强式学习Reforcement learning提供更多的资料提供一些范例Incontext- learning 任务拆解让模型自己检查错误让模型多次生成答案Tree of Thoughts让模型使用其他工具RAG写程序POT其他工具 让多个模型合作参考 在模型不变的情况下&#…...

C++连接oracle数据库连接字符串

//远程连接&#xff0c;需要安装oracle客户端sprintf(szConnect4, ("Provider OraOLEDB.Oracle.1; Password %s; Persist Security Info True; User ID %s; Data Source \"(DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST %s)(PORT 1521)) )(CONN…...

判断字符串是否接近:深入解析及优化【字符串、哈希表、优化过程】

本文将详细解析解决这个问题的思路&#xff0c;并逐步优化实现方案。 问题描述 给定两个字符串 word1 和 word2&#xff0c;如果通过以下操作可以将 word1 转换为 word2&#xff0c;则认为它们是接近的&#xff1a; 交换任意两个现有字符。将一个现有字符的每次出现转换为另…...

C 和 C++ 中信号处理简单介绍

信号处理是编程中一个重要的主题&#xff0c;特别是在需要处理异步事件和错误情况的系统中。在 C 和 C 语言中&#xff0c;信号处理机制提供了一种优雅的方式来响应特定的系统事件&#xff0c;例如用户中断、异常情况或其他信号。在这里&#xff0c;我将详细介绍 C 和 C 中信号…...

什么是云边协同?

当今信息技术高速发展的时代&#xff0c;"云边协同"&#xff08;Edge Cloud Collaboration&#xff09;已经成为一个备受关注的话题。它涉及到云计算和边缘计算的结合&#xff0c;为数据处理、存储和应用提供了全新的可能性。本文将介绍云边协同的概念、优势以及在不…...

YOLOv5改进 | 主干网络 | 将backbone替换为MobileNetV2【小白必备教程+附完整代码】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a; 《YOLOv5入门 改…...

ARMxy边缘计算网关用于过程控制子系统

在现代工业生产中&#xff0c;过程控制系统的优化对于提高生产效率、保证产品质量、降低能源消耗等方面都具有重要意义。而 ARMxy 工控机作为一种高性能、高可靠性的工业控制设备&#xff0c;正逐渐成为过程控制系统优化的新选择。 ARMxy 工控机采用了先进的 ARM 架构处理器&am…...

Python | TypeError: unsupported operand type(s) for +=: ‘int’ and ‘str’

Python | TypeError: unsupported operand type(s) for : ‘int’ and ‘str’&#xff1a;深度解析 在Python编程中&#xff0c;遇到“TypeError: unsupported operand type(s) for : ‘int’ and ‘str’”这类错误通常意味着你尝试将一个整数&#xff08;int&#xff09;和…...

什么是开源什么是闭源?以及它们之间的关系

开源软件&#xff08;Open Source Software&#xff09; 定义&#xff1a;开源软件是指其源代码可以被公众访问和使用的软件。用户可以查看、修改和增强软件的源代码。 许可&#xff1a;通常遵循特定的开源许可证&#xff0c;如GNU通用公共许可证&#xff08;GPL&#xff09;、…...

SpringBoot+Mybatis Plus实际开发中的注解

SpringBoot+Mybatis Plus实际开发中的注解 实体类Service层Mapper层Controller层启动类配置类SpringBoot+Mybatis Plus实际开发中的注解 实体类 @Data : 底层实现了getter、setter、toString、hashCode、equals 和无参构造@AllArgsConstructor: 底层实现了有参构造@NoArgsCon…...

【香橙派系列教程】(八)一小时速通Python

【八】一小时速通Python 本章内容服务于香橙派下的开发&#xff0c;用C语言的视角来学习即可&#xff0c;会改就行。 详细说明&#xff0c;请看链接:python全篇教学 Python是一种动态解释型的编程语言&#xff0c;Python可以在Windows、UNIX、MAC等多种操作系统上 使用&…...

了解JavaScript 作用、历史和转变

JavaScript 是一种即时执行的脚本语言&#xff0c;其代码在浏览器环境中通过内置的 JavaScript 引擎被动态地一行接一行地解释执行。这一特性赋予了开发者极高的灵活性和效率&#xff0c;因为代码修改后能立即生效&#xff0c;无需经历编译过程&#xff0c;从而加速了开发周期和…...

从引物选择到功能预测:基于 QIIME2 的 16S rRNA 测序全流程实战与深度解析

1. 16S rRNA测序基础与实验设计 第一次接触16S rRNA测序时&#xff0c;我被各种专业术语搞得晕头转向。后来才发现&#xff0c;理解这个技术就像学习一门新语言&#xff0c;只要掌握核心逻辑就能豁然开朗。16S rRNA基因相当于细菌的"身份证"&#xff0c;每个物种的这…...

语言介绍、软件安装、项目创建、输出语句、注释

C# 语言简绍C#是什么&#xff1f;1.C# 编程是基于 C 和 C 编程语言衍生出来的面向对象的编程语言2.C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。C#与C和C的对比1.C#是由C和C衍生出来的面向对象的编程语言。2.它在继承C和C强大功能的同时去…...

Qwen3-ASR-0.6B入门指南:语音识别模型推理框架vLLM异步服务配置

Qwen3-ASR-0.6B入门指南&#xff1a;语音识别模型推理框架vLLM异步服务配置 1. 快速了解Qwen3-ASR-0.6B Qwen3-ASR-0.6B是一个专门用于语音识别的AI模型&#xff0c;属于Qwen3-ASR系列中的轻量级版本。这个模型最大的特点是既能识别语音内容&#xff0c;还能判断说话人使用的…...

智能编码助手横向测评:GitHub Copilot vs Cursor,谁才是你的最佳拍档?

&#x1f44b; 大家好&#xff0c;欢迎来到我的技术博客&#xff01; &#x1f4da; 在这里&#xff0c;我会分享学习笔记、实战经验与技术思考&#xff0c;力求用简单的方式讲清楚复杂的问题。 &#x1f3af; 本文将围绕人工智能这个话题展开&#xff0c;希望能为你带来一些启…...

5分钟掌握llama-cpp-python:本地AI模型部署终极指南

5分钟掌握llama-cpp-python&#xff1a;本地AI模型部署终极指南 【免费下载链接】llama-cpp-python Python bindings for llama.cpp 项目地址: https://gitcode.com/gh_mirrors/ll/llama-cpp-python 想要在个人电脑上运行大型语言模型却不知从何入手&#xff1f;llama-c…...

如何快速备份QQ空间历史记录:GetQzonehistory终极完整指南

如何快速备份QQ空间历史记录&#xff1a;GetQzonehistory终极完整指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是不是也有这样的经历&#xff1f;在QQ空间发布了无数条说说&am…...

DataGrip高效操作指南(动图演示版)

1. DataGrip入门&#xff1a;从安装到第一个连接 第一次打开DataGrip时可能会被满屏的英文界面吓到&#xff0c;但别担心&#xff0c;这玩意儿用起来比看起来简单多了。我当年从Navicat转过来的时候也适应了两天&#xff0c;现在回头看看简直像从自行车换到了跑车。安装包直接去…...

2026-04-11:有效子序列的数量。用go语言,给定一个整数数组 nums,定义“强度”为数组中所有元素做按位或运算(OR)的结果。你可以从原数组中删去一些元素但保持剩余元素的相对顺序,得到一个非

2026-04-11&#xff1a;有效子序列的数量。用go语言&#xff0c;给定一个整数数组 nums&#xff0c;定义“强度”为数组中所有元素做按位或运算&#xff08;OR&#xff09;的结果。你可以从原数组中删去一些元素但保持剩余元素的相对顺序&#xff0c;得到一个非空子序列。若删除…...

从零开始:基于TensorFlow和卷积神经网络的交通标志识别实战指南

1. 环境配置与工具安装 第一次接触深度学习项目时&#xff0c;环境配置往往是最让人头疼的环节。记得我刚开始做图像识别项目时&#xff0c;光是配环境就折腾了两天。现在回想起来&#xff0c;其实只要掌握正确的方法&#xff0c;整个过程可以非常顺畅。 对于交通标志识别项目&…...

AWS CDN 配置:实现非 www 域名自动跳转到 www.xxx.com

1. 为什么需要将非 www 域名跳转到 www 域名&#xff1f; 很多网站在运营过程中都会遇到一个经典问题&#xff1a;用户可能通过带 www 的域名&#xff08;如 www.example.com&#xff09;访问&#xff0c;也可能直接输入不带 www 的域名&#xff08;如 example.com&#xff09;…...