首页 > 其他分享 >树上点到路径/链的最短距离

树上点到路径/链的最短距离

时间:2024-05-30 14:12:48浏览次数:20  
标签:dep 路径 节点 短距离 lca 情况 点到 operatorname

结论

树上一个点 \(x\) 到路径 \(u\rightarrow v\) 的最短距离为:

\[dep[x]+dep[\operatorname{lca}(u,v)]-dep[\operatorname{lca}(x,u)]-dep[\operatorname{lca}(x,v)] \]

其中,\(dep\) 为该点的深度,\(\operatorname{lca}\) 为两点的最近公共祖先。

证明

我们提取出同时包含 \(x,u,v\) 的最小的子树,下图以红色表示。

我们发现其实只要证明了这样子树的情况结论成立,即可证明所有情况下结论成立,如下图,当子树扩展到整棵树时,子树内节点的 \(dep\) 都会变大相同值(图中示例 \(dep\) 全部 \(+2\)),因此结果并不会变。

分讨证明

太长不看请跳转分析证明

分讨虽然是一种比较低效的方法,但是看完可能有助于理解,不过看完分讨仍建议继续读分析证明。

情况一 子树根为 \(u,v\) 之一

1

蓝线为最短距离,绿点为路径上离 \(x\) 最近的点。

不妨设此时 \(u\) 为根节点,因为容易发现,结论中的式子 \(u,v\) 交换其实是相等的。

我们发现该情况下 \(x\) 到 \(u\rightarrow v\) 路径上最近的点就是 \(\operatorname{lca}(x,v)\),距离为 \(dep[x]-dep[\operatorname{lca}(x,v)]\),而此时 \(dep[\operatorname{lca}(u,v)]\) 与 \(dep[\operatorname{lca}(x,u)]\) 都一定为 \(0\)。该性质对于所有 \(u\) 为根节点的情况都成立,包括下图 \(x\) 为 \(v\) 祖先和 \(v\) 为 \(x\)​ 祖先的情况。

1
1

情况二 子树根为 \(x\)

1

很明显该情况下路径上距离 \(x\) 最近的点为 \(\operatorname{lca}(u,v)\),因此距离为 \(dep[\operatorname{lca}(u,v)]\),而由于 \(x\) 是根节点剩下三个 \(dep\) 都为 \(0\)。

情况三 子树根不为 \(x,u,v\) 之一

这是最复杂的一种情况,又分为三种子情况考虑。

这里称(有根)树上两点 \(x,y\)​ 如果其中一个为另一个的祖先,称它们之间的路径为一条链。

不可能存在 \(u,v,x\) 在一条链上的情况,此时包含它们最小的子树的根一定为 \(u,v,x\) 之一,与情况三条件冲突。

1. \(u,v,x\) 互不成链

1

标出 \(dep[x]\) 与 \(dep[\operatorname{lca}(u,v)]\),加起来正好为答案,此时 \(dep[\operatorname{lca}(x,u)], dep[\operatorname{lca}(x,v)]\) 为 \(0\)​。

1

2. \(u,v\) 成链,但与 \(x\) 不成链

1

标出 \(dep[x]\) 与 \(dep[\operatorname{lca}(u,v)]\),加起来为答案,可以发现与 \(x\) 不成链时 \(dep[\operatorname{lca}(x,u)], dep[\operatorname{lca}(x,v)]\) 肯定是为 \(0\)​ 的。

1

3. \(u,v\) 其中一个与 \(x\) 成链,\(u,v\) 之间不成链

同理此时 \(u,v\) 互换不影响结果,我们不妨设此时与 \(x\) 成链的为 \(u\)​。

再分为 \(x\) 为 \(u\) 祖先以及反过来 \(u\) 为 \(x\) 祖先两种情况考虑。

\(x\) 为 \(u\) 祖先
1

刚好抵消,事实上答案也确实为 \(0\)。

\(u\) 为 \(x\) 祖先
1

相减为 \(1\)​,答案正确。

分析证明

通过上方的枚举,我们可以总结出,其实 \(dep[x]\) 和 \(dep[\operatorname{lca}(u,v)]\) 是在处理 \(x\) 和 \(u,v\) 之间的关系,我们先将 \(u,v\) 当成一个整体用 \(\operatorname{lca}(u,v)\) 来代表,和 \(x\) 算距离,算距离的方式是用两者的 \(dep\) 加起来,最后再用 \(dep[\operatorname{lca}(x,u)]\) 和 \(dep[\operatorname{lca}(x,v)]\) 进行补偿。当然我们可以证明:还需要补偿的情况,一定是 \(\operatorname{lca}(u,v)\) 是子树根节点的情况(如果你想不明白就回去把分讨再看一下吧),因此我们以下的证明均假设 \(\operatorname{lca}(u,v)\)​ 是子树的根节点。

再进一步说:

\(x\) 在 \(u,v\) 的 LCA 的子树里才需要补偿。

反之 \(x\) 不在 \(u,v\) 的 LCA 的子树里那么 \(dep[x]+dep[\operatorname{lca}(u,v)]\)​ 已经足够,不需要补偿。

只是为了得到一个通式把两种情况合并成了一个式子。

具体怎么补偿呢?看下图,我们先把 \(dep[x]\) 和 \(dep[\operatorname{lca}(u,v)]\) 加起来,也就是所有的紫色部分,我们原先以为 \(x\) 到 \(u\rightarrow v\) 路径上最近的点是 \(\operatorname{lca}(u,v)\),但我们发现事实上不是,\(x\) 到 \(\operatorname{lca}(u,v)\) 的路径和 \(u\) 到 \(v\) 的路径有一部分重合了啊,于是把重合的虚线部分减掉。那这个虚线部分到底是怎么算出来的呢?我们知道树上每个点到根节点的路径是唯一的,我们也知道树上两个点的路径是从一个点出发到 LCA 再到另一个点,因此重合的部分当然就是 \(x\) 到 \(\operatorname{lca}(u,v)\) 的路径和 \(u\) 到 \(\operatorname{lca}(u,v)\) 的路径第一个重合的点(即 \(\operatorname{lca}(x,u)\))到 \(\operatorname{lca}(u,v)\) 的部分,这部分距离就是 \(dep[\operatorname{lca}(x,u)]\)​。

你说那现在 \(dep[\operatorname{lca}(x,u)]\) 的事解决了,那还要减 \(dep[\operatorname{lca}(x,v)]\) 干啥呢?你有没有发现 这时候 \(dep[\operatorname{lca}(x,v)]=0\)?可以证明相同情况下 \(dep[\operatorname{lca}(x,u)]\) 和 \(dep[\operatorname{lca}(x,v)]\) 最多只会有一个起到补偿,一个有值另外一个一定为 \(0\),不存在两者同时不为 \(0\) 的情况,只是我们为了得到一个通式于是两个都减了。

1

标签:dep,路径,节点,短距离,lca,情况,点到,operatorname
From: https://www.cnblogs.com/SkyNet-PKN/p/18222205

相关文章

  • m基于Qlearning强化学习工具箱的网格地图路径规划和避障matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:   2.算法涉及理论知识概要       Q-Learning是强化学习中的一种重要算法,它属于无模型(model-free)学习方法,能够使智能体在未知环境中学习最优策略,无需环境的具体模型。将Q-Learning应用于路线规划和避障策略中,智能体(如机......
  • 关于 IDEA 2023.3.1总管理配置maven路径
    先调出主页面,再选择主页面中的maven路径配置1、调出主页面. 在设置中搜索System,选中SystemSettings模块,取消Confirm和Reopen模块的勾选     2、重新启动进入主页面点击Customise中的Allsettings,进入总设置,在此进行maven配置即可......
  • 队列迷宫求解最短路径
    目录课程设计目的课程设计内容和要求问题描述   2.设计要求课程设计总体方案及分析问题分析   2.概要设计3.详细设计数据结构设计函数功能设计调试分析测试结果课程设计总结附录(源代码)课程设计目的本课程目的在于充分理解队列的应用,了解队列“......
  • 多A*算法路径规划(附MATLAB代码)
     A*算法介绍A*算法是一种常用的寻路算法,被广泛应用于人工智能和游戏开发中。该算法通过评估每个节点的代价和启发式函数来找到最佳路径。在这篇博文中,我们将深入探讨A*算法的原理。A*算法的核心思想是在搜索过程中综合考虑两个因素:已经花费的代价和还需要花费的代价。具体而......
  • PSO算法路径规划(附MATLAB代码)
    粒子群优化(PSO)算法一种启发式优化算法,灵感来源于鸟群或鱼群等群体智能行为的模拟。PSO算法最早由Kennedy和Eberhart于1995年提出,通常用于解决搜索空间连续、高维的优化问题。PSO算法模拟了鸟群中鸟类搜索食物的行为。在PSO算法中,候选解称为粒子,每个粒子通过搜索空间中移动来......
  • ClickHouse 留存、路径、漏斗、session 位图 roaringbitmap 位图优化
    Clickhouse在大数据分析平台-留存分析上的应用_大数据_腾讯云大数据_InfoQ写作社区https://xie.infoq.cn/article/c7af40e5ba5f5f5beaccde990ClickHouse实战留存、路径、漏斗、session-腾讯云开发者社区-腾讯云https://cloud.tencent.com/developer/article/1953792导语 | ......
  • (二刷)代码随想录第17天|● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之
    110.平衡二叉树math.abs指的是绝对值;这棵树的左右子树的高度差小于1的时候,同时该树的左右子树都是平衡二叉树的时候,这棵树才是平衡二叉树;classSolution{publicbooleanisBalanced(TreeNoderoot){returngetHeight(root)!=-1;}privateint......
  • windows ollama 指定模型下载路径
    为Ollama指定模型的下载路径在Windows系统中,如果想为Ollama指定模型的下载路径,可以通过设置环境变量来实现。以下是详细的步骤:确定默认下载路径:默认情况下,Ollama的模型可能会下载到C:\Users\<用户名>\.ollama\models目录下。设置新的下载路径:如果想更改这个默认路径,需要设......
  • 【Java】 解决Java SSL握手异常:PKIX路径构建失败错误
    >>【痕迹】QQ+微信朋友圈和聊天记录分析工具>>(1)纯Python语言实现,使用Flask后端,本地分析,不上传个人数据。>>(2)内含QQ、微信聊天记录保存到本地的方法,真正实现自己数据自己管理。>>(3)数据可视化分析QQ、微信聊天记录,提取某一天的聊天记录与大模型对话。>>**下载......
  • 我见我思之hvv偷师学艺——目录遍历/路径遍历/文件遍历 漏洞
    注:本文仅作为技术交流使用,如有违反行为本文作者概不负责。常见告警信息价值提取:源IP大概率为代理IP,可通过威胁情报平台进行识别此IP的历史攻击行为。源端口参考意义不大。目的IP我方资产IP(可定位疑似存在漏洞的资产的具体范围)。目的端口我方资产IP对应端口(可通过端口辅助......