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

目录:

树的直径:

树的直径的性质: 

性质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.mzph.cn/web/45901.shtml

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

相关文章

STM32中PC13引脚可以当做普通引脚使用吗?如何配置STM32的TAMPER?

1.STM32中PC13引脚可以当做普通引脚使用吗&#xff1f; 在STM32单片机中&#xff0c;PC13引脚可以作为普通IO使用&#xff0c;但需要进行一定的配置。PC13通常与RTC侵入检测功能&#xff08;TAMPER&#xff09;复用&#xff0c;因此需要关闭TAMPER功能才能将其作为普通IO使用。…

服务端渲染框架:Nuxt.js 与 Next.js 的区别和对比

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

2024国家护网面试小结

24年国护马上就要开始&#xff0c;基本上大部分蓝队红队都已经准备入场了 今年护网第一年变成常态化护网&#xff0c;由十五天突然变成了两个月常态化&#xff0c;导致今年护网有很多项目整的七零八落 博主今年参加了三家厂商蓝队护网面试&#xff0c;在这边分享一下护网面试…

掌握这些技巧,让你成为画册制作高手

在数字化的时代背景下&#xff0c;电子画册以其便捷的传播方式、丰富的视觉表现形式&#xff0c;赢得了大众的喜爱。它不仅能够在个人电脑上展现&#xff0c;还能通过智能手机、平板电脑等多种移动设备随时随地被访问和浏览。这种跨平台的支持&#xff0c;使得无论你身处何地&a…

Html_Css问答集(12)

99、将上例的0%改为30%&#xff0c;会如何变化&#xff1f; none:延迟2秒间无色&#xff0c;3.8秒&#xff08;0%-30%占1.8秒&#xff09;前无色&#xff0c;之后变红到5秒绿最后蓝&#xff0c;动画结束时恢复初始&#xff08;无色&#xff09;。 forward:延迟2秒间无色&am…

leetcode刷题总结——字符串匹配

KMP&#xff08;字符串匹配算法&#xff09; 主串或目标串&#xff1a;比较长的&#xff0c;我们就是在它里面寻找子串是否存在&#xff1b; 子串或模式串&#xff1a;比较短的。 前缀&#xff1a;字符串A和B&#xff0c;A BS&#xff0c;S非空&#xff0c;则B为A的前缀。 …

婚礼成本与筹备策略:一场梦幻婚礼的理性规划

婚礼成本与筹备策略&#xff1a;一场梦幻婚礼的理性规划 摘要 婚礼&#xff0c;作为人生中的重要仪式&#xff0c;承载着新人的爱情与梦想&#xff0c;同时也伴随着不菲的经济投入。本文旨在探讨婚礼所需的大致成本、影响成本的主要因素以及婚礼筹备过程中的关键注意事项&…

【Java--数据结构】二叉树

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 树结构 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合 注意&#xff1a;树形结构中&#xff0c;子…

Transformer模型在多任务学习中的革新应用

在深度学习领域&#xff0c;多任务学习&#xff08;Multi-task Learning, MTL&#xff09;是一种训练模型以同时执行多个任务的方法。这种方法可以提高模型的泛化能力&#xff0c;因为它允许模型在不同任务之间共享知识。近年来&#xff0c;Transformer模型因其在自然语言处理&…

【linux高级IO(三)】初识epoll

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux高级IO 1. 前言2. 初识e…

STM32 HRTIM生成PWM时遇到无法输出PWM脉冲波形问题

在使用HRTIM生成PWM时&#xff0c;当把周期寄存器更新的设置放到while循环中时&#xff0c;无法输出PWM脉冲波形&#xff0c;即使增加计数延时也无法输出&#xff0c;最终只能放到中断函数中执行后期寄存器值更新才能够生成PWM脉冲波形。

主流大数据调度工具DolphinScheduler之数据ETL流程

今天给大家分享主流大数据调度工具DolphinScheduler&#xff0c;以及数据的ETL流程。 一&#xff1a;调度工具DS 主流大数据调度工具DolphinScheduler&#xff0c; 其定位&#xff1a;解决数据处理流程中错综复杂的依赖关系 任务支持类型&#xff1a;支持传统的shell任务&a…

Python学习4---迭代器和生成器的区别

一、迭代器 定义&#xff1a;迭代器是一个可以记住遍历的位置的对象。迭代器对象必须实现两个方法&#xff0c;iter() 和 next()。字符串、列表或元组等数据类型都是可迭代对象&#xff0c;但它们不是迭代器&#xff0c;因为它们不具有 next() 方法。迭代器对象用于遍历可迭代对…

冷却塔由那些配件组成

1、淋水填料 将需要冷却的水&#xff08;热水&#xff09;多次溅洒成水滴或形成水膜&#xff0c;以增加水和空气的接触面积和时间&#xff0c;促进水和空气的热交换。 填料在开式横流冷却塔的作用是增加循环水与空气的接触面积&#xff0c;并延长冷却水停留在空气中的时间&am…

LabVIEW工业设备姿态监测系统

开发了一种基于LabVIEW的工业设备姿态监测系统&#xff0c;针对现有监测设备在适应性和反应时间上的不足&#xff0c;采用了LabVIEW软件和STM32微控制器&#xff0c;通过高精度姿态传感器实现了对设备姿态的快速准确监测&#xff0c;大大提高了工业作业的安全与效率。 项目背景…

C++深度解析教程笔记9-静态成员变量,静态成员函数,二阶构造,友元,函数重载,操作符重载

C深度解析教程笔记9 第25课 - 类的静态成员变量实验-数对象个数&#xff08;失败&#xff09;实验-静态变量小结 第26课 - 类的静态成员函数实验-修改对象的静态变量数值实验-利用静态成员函数实验-静态变量静态函数实现统计对象个数小结 第27课 - 二阶构造模式实验-初始化是否…

百度人脸识别Windows C++离线sdk C#接入

百度人脸识别Windows C离线sdk C#接入 目录 说明 设计背景 • 场景特点&#xff1a; • 客户特点&#xff1a; • 核心需求&#xff1a; SDK 包结构 效果 代码 说明 自己根据SDK封装了动态库&#xff0c;然后C#调用。 功能接口 设计背景 • 场景特点&#xff1a; -…

【渗透入门】XSS

文章目录 XSS漏洞XSS举例XSS类型防御方式 XSS漏洞 XSS&#xff08;Cross-Site Scripting&#xff0c;跨站脚本攻击&#xff09;是一种常见的Web应用程序安全漏洞。XSS漏洞发生在应用程序未能充分过滤用户提供的数据&#xff0c;使得恶意脚本得以在不知情的用户的浏览器中被执行…

ARFoundation系列讲解 - 91 Immersal 简介

一、Immersal 简介 Immersal是一家专注于增强现实(AR)技术的公司,致力于开发和推广空间感知解决方案(简称:大空间技术)。他们的核心产品是一个名为Immersal SDK的开发工具包,通过视觉定位(VPS)能够轻松地在现实世界中实现高精度的定位和增强现实体验。 二、Immersal …

Spring Boot集成Knife4j:实现高效API文档管理

Spring Boot集成Knife4j&#xff1a;实现高效API文档管理 在软件开发过程中&#xff0c;编写和维护接口文档是一项必不可少的任务。随着微服务架构的流行&#xff0c;API文档的重要性日益凸显。然而&#xff0c;传统的手动编写文档方式不仅效率低下&#xff0c;而且容易出错。…