C++树(二)【直径,中心】

news2024/9/20 14:30:41

目录:

树的直径:

树的直径的性质: 

性质1:直径的端点一定是叶子节点                

性质2:任意点的最长链端点一定是直径端点。

性质3:如果一棵树有多条直径,那么它们必然相交,且有极长连续段(可以是一个点,交点为树的中心)

性质4:树T1的直径为x,y,树T2的直径为s,t。现有一边u,v与两颗树相连,新树的直径端点一点是x,y,s,t中的两个

树的直径求解方法:

树的直径的端点

树的中心

树的中心求解:

树的中心两个性质:

        证明:

公共点公共边的求法:

总结:

一、树的直径的四个基础性质

二、树的直径相关求解问题


树的直径:

定义:树的直径是树上两点间距离的最大值。即树中最远的两个节点之间的距离被称为树的直径,连接这两点的路径被称为树的最长链。

链1) 5- 7 - 8 -3

链2) 1- 4 - 7 - 8 - 3

直径为17

树的直径的性质: 

性质1:直径的端点一定是叶子节点                
        证明:假设直径s-t外存在一点p相连->s-t-p st+tp>st<sp   不成立
性质2:任意点的最长链端点一定是直径端点。
        证明:

性质3:如果一棵树有多条直径,那么它们必然相交,且有极长连续段(可以是一个点,交点为树的中心)
        证明:

性质4:树T1的直径为x,y,树T2的直径为s,t。现有一边u,v与两颗树相连,新树的直径端点一点是x,y,s,t中的两个

证明:

         性质4分析:

uv连接后有两种情况

1.新直径不过uv,即现直径为st或为xy。2.新直径过uv,则现直径为

max(vs,vt)+max(ux,uy)+uv。

这两种情况都能保证新直径端点为x,y,s,t中的任意两个。新直径为以上三个中最大值。

        连边uv求新树直径最小:
引理性质4可知:

st与xy不变,此时只能减下过uv的直径大小。以max(vs,vt)为例,要使该值最小,则v应当在树的中心位置,这样vs与vt越均衡。

同理u也应该在T2的树的中心位置。

        连边uv求新树直径最大:

与前面一致,以max(vs,vt)为例,要使得该值最大,则v应当选择直径端点位置。

因此uv选择各自直径的端点位置时,直径最大。

树的直径求解方法:

引理性质2:任意点的最长链端点一定是直径端点。

方法:随意找一个点x,进行dfs找到最长链的端点s,再以端点s做第二遍dfs,此时可以找到直径的第二个端点t。此时端点s到t的距离就是树的直径。

树的直径的端点

通过记录父亲节点的方式能够把直径上的所有点全部记录下来。

在树中,直径端点是常用点(假设端点为s,t),我们树上任意一点p所能到的最大距离,只有可能是到ps或pt

找到所有点到两个直径端点的距离方法

法一(朴素方法):

        求出直径端点后,以每个点为根做dfs,找到根节点到端点的距离。

        复杂度O(N2)。

法二(优化方法):

        第一次从任意点出发,必然能到达直径的一个端点s。

        第二次从s点进行dfs找到端点t,此时记录所有点到s的距离。

        第三次从t点进行dfs,记录所有点到t的距离。

        复杂度:O(n)

树的中心

概念:以树的中心为根时,从该根到每个叶子节点的最长路径最短,使得路径和平衡。

树的中心求解:

        我们现在已经知道求解任意一点到两端点的距离,即根据性质2可很轻松得到每个点能到的最长路径。求出每个点后的路径后,一次遍历便可知树的中心点。

树的中心两个性质:

性质1:树的中心一定在直径上,且趋向于中点位置

性质2:树的中心可以有一个(单中心),也可以有两个(双中心)

        证明:

引理性质2,若树的中心p不在直径st上,st上有一点q与直径联通。中心点能到的最远距离为:

max(qs,qt)+pq,若要使得该值最小,pq应当为0,因此p在直径上。

同时为了让max(qs,qt)更小,树的中心要在直径中点处。

直径公共点证明与求解方法

以当一颗树存在多条直径时,引理性质3,公共边一定连续,因此可以直接对公共点/边进行求解

公共点公共边的求法:

        找到直径左右端点s,t,从左往右遍历直径上的点进行

        dfs,如果某点r在直径外找到一点与到右端点t距离相同,点r右边的点一定不是公共点。

        同理,从右往左遍历直径上的点进行dfs,如果某点l在直径外找到一点与到左端点s距离相同,l左边的点一定不是公共点。此时,l->r就是我们直径的公共点。

        因此我们只需要找到公共点边界l,r即可。使得l尽可能靠右,r尽可能靠左。

总结:

一、树的直径的四个基础性质

性质1:直径的端点一定是叶子节点

性质2:任意点的最长链端点一定是直径端点

性质3:如果一棵树有多条直径,那么它们必然相交,且有极长连续段

性质4:两颗树加一条边相连,构成的新树直径端点一点是x,y,s,t中的两个

二、树的直径相关求解问题

1. 树的直径以及所有点到直径左右端点距离的解法。

2. 树的中心的含义以及求解方法。

3. 直径的公共点/边的求解方法。

4. 两颗树连边后求新树的最小/大直径方法。

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

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

相关文章

Linux搭建Kubernetes集群(单Master)【附图文】

文章目录 一、集群环境配置要求二、主机准备三、初始环境准备1.关闭防火墙2.关闭 selinux3.关闭swap4.加载 br_netfilter 模块5.允许iptables转发流量6.设置时间同步 四、安装Docker五、安装kubeadm, kubectl, kubelet六、在Master节点部署集群七、将 node 节点加入集群八、部署…

springcloud rocketmq 新增的消费者组从哪里开始消费

如果新建一个新的消费者组&#xff0c;是否会消费历史消息&#xff0c;导致重复消费&#xff1f; 直接在 console 界面新增消费者组&#xff0c;但是没有办法绑定订阅关系&#xff0c;没有找到入口&#xff0c;在 控制台项目源码 rocketmq-externals 也没有找到可以确定订阅关系…

Windows 11预览补丁KB5040527影响火绒驱动加载的解决办法

7 月 11 日&#xff0c;微软更新Windows 11 预览版本补丁 KB5040527&#xff0c;补丁安装后会影响火绒驱动加载导致火绒安全软件服务异常&#xff0c;补丁相关信息如下&#xff1a; https://blogs.windows.com/windows-insider/2024/07/11/releasing-windows-11-builds-22621-…

微信视频号下载又一工具,免费简单易用!

Res-downloader嗅探资源下载器请收好 官方称支持微信视频号、抖音、快手、小红书等网络资源下载 使用方法 第一步&#xff0c;下载软件 文末扫码 或者搜索关注公众号AIshape 回复 RES 获取 或 自行百度搜索下载 第二步&#xff0c;软件设置 打开软件会弹出接受传入网络链…

CSI-RS在信道中传输的过程

简单介绍CSI-RS信号生成&#xff0c;在信道中传输和接收的过程 1.载波配置 首先需要配置载波相关的参数 系统带宽和子载波间隔 5G NR中&#xff0c;系统带宽和子载波间隔是两个关键参数&#xff0c;共同决定无线资源的分配和使用 系统带宽 5G NR支持广泛的系统带宽&…

【SOC 芯片设计 DFT 学习专栏 -- DFT OCC 与 ATPG的介绍】

请阅读【嵌入式及芯片开发学必备专栏】 请阅读【芯片设计 DFT 学习系列 】 如有侵权&#xff0c;请联系删除 转自&#xff1a; 简矽芯学堂 简矽芯学堂 2024年01月18日 09:00 陕西 文章目录 OCC 介绍Fast ScanFull chip ATPGPartition ATPGHierarchical ATPG OCC 介绍 OCC&am…

Ubuntu下载jdk:cannot execute binary file

虚拟机上Ubuntu系统安装jdk且配置环境之后&#xff0c;java -version显示cannot execute binary file&#xff0c;多番查阅推测是由于系统和jdk版本不兼容的原因。 uname -m查看系统版本位i686&#xff0c;是32位的&#xff0c;和64位的jdk版本不兼容。因此&#xff0c;下载32位…

QT--进程

一、进程QProcess QProcess 用于启动和控制外部进程&#xff0c;管理其输入输出流。 使用方法 start()&#xff1a;启动一个新进程。setStandardInputFile()&#xff1a;将文件作为标准输入。将进程的标准输入&#xff08;stdin&#xff09;重定向到指定的文件。换句话说&am…

【Linux】从零开始认识多线程 --- 线程互斥

人生有许多事情 正如船后的波纹 总要过后才觉得美的 -- 余光中 线程互斥 1 线程类的封装1.1 框架搭建1.2 线程启动1.3 线程终止1.4 线程等待1.5 运行测试 2 线程互斥2.1 多线程访问的问题2.2 解决办法 --- 锁2.3 从原理角度理解锁 Thanks♪(&#xff65;ω&#xff65;)&am…

QT信号和信号槽

信号和信号槽 一.信号与槽1.信号和槽的概述1.2.信号的本质1.3.信号的本质 二.信号和槽的使用2.1 连接信号和槽connect()函数原型&#xff1a;参数的说明 三.自定义信号和槽3.1基本语法1.自定义信号槽的书写规范2、自定义槽函数书写规范3.发送信号 3.2带参数的信号和槽 四.信号与…

Eclipse 搭建 C/C++ 开发环境以及eclipse的使用

一、下载、安装 MinGW 1、下载: 下载地址&#xff1a;MinGW - Minimalist GNU for Windows - Browse Files at SourceForge.net 点击“Download Latest Version”即可 下载完成后&#xff0c;得到一个名为 mingw-get-setup.exe 的安装文件。双击运行&#xff0c;安装即可。 …

一套功能齐全、二开友好的即时通讯IM工具,提供能力库和UI库,支持单聊、频道和机器人(附源码)

前言 在当今数字化时代&#xff0c;即时通讯(IM)和实时音视频(RTC)功能已成为众多应用的标配。然而&#xff0c;现有的解-决方案往往存在一些痛点&#xff0c;如架构落后、成本高昂、数据安全性和隐私保护不足&#xff0c;以及二次开发和部署的复杂性。 为了解决这些问题&…

超薄超小单独北斗定位的4G工牌记录仪、4G胸卡记录仪

AIoT万物智联&#xff0c;智能安全帽生产厂家&#xff0c;执法记录仪生产厂家&#xff0c;智能安全帽、智能头盔、头盔记录仪、执法记录仪、智能视频分析/边缘计算AI盒子、车载DVR/NVR、布控球、智能眼镜、智能手电、智能电子工牌、无人机4G补传系统等统一接入大型融合通信可视…

无法继续安装 计算机正忙于安装一个非 Visual Studio 的程序。

解决办法 以管理员身份打开cmd运行窗口&#xff0c;执行以下命令&#xff1a; taskkill -f -im msiexec*

网络三剑客之sed

目录 一、sed是什么 二、sed为什么这样工作&#xff08;原理&#xff09; 三、sed命令该怎么操作 3.1 基本的操作选项 3.2 怎么去使用sed 3.3 操作实例 3.3.1 打印输出&#xff08;-n、-p、-r&#xff09; 3.3.2 增加内容&#xff08;i、a&#xff09; 3.3.3 删除&…

网络安全入门教程(非常详细)从零基础入门到精通_网路安全 教程

前言 1.入行网络安全这是一条坚持的道路&#xff0c;三分钟的热情可以放弃往下看了。2.多练多想&#xff0c;不要离开了教程什么都不会了&#xff0c;最好看完教程自己独立完成技术方面的开发。3.有时多百度&#xff0c;我们往往都遇不到好心的大神&#xff0c;谁会无聊天天给…

机器学习 | 回归算法原理——最速下降法(梯度下降法)

Hi&#xff0c;大家好&#xff0c;我是半亩花海。接着上次的最小二乘法继续更新《白话机器学习的数学》这本书的学习笔记&#xff0c;在此分享最速下降法&#xff08;梯度下降法&#xff09;这一回归算法原理。本章的回归算法原理基于《基于广告费预测点击量》项目&#xff0c;…

大文件分片上传(前端TS实现)

大文件分片上传 内容 一般情况下&#xff0c;前端上传文件就是new FormData,然后把文件 append 进去&#xff0c;然后post发送给后端就完事了&#xff0c;但是文件越大&#xff0c;上传的文件也就越长&#xff0c;如果在上传过程中&#xff0c;突然网络故障&#xff0c;又或者…

opencascade AIS_InteractiveContext源码学习9 obsolete methods

AIS_InteractiveContext 前言 交互上下文&#xff08;Interactive Context&#xff09;允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是&#xff0c;对于已经被交互上下文识别的交互对象&#xff0c;必须使用上下文方法进行…

鸿蒙SDK开发能力

什么是鸿蒙SDK&#xff1a;HarmonyOS(Software Development Kit)是面向应用和服务开发的开放能力合集,本质就是工具集&#xff0c;与JDK、AndroidSDK在逻辑上有相似之处 18N&#xff1a;1指的是手机&#xff0c;8指的是车机、音箱、耳机、手表/手环、平板、大屏、PC、AR/VR&am…