树的直径,树的中心,树的重心

树的直径:树上两点间最长距离所对应的路径

求法一:树形dp;

  • 从每个点向下搜索,找到以该点为根到子节点的最大值和次大值
  • 然后将次大值和最大值相加,即求得经过该点的最长路径
  • 然后遍历所有点,找最长的最长路径

树形 DP 可以在存在负权边的情况下求解出树的直径

提出的疑惑

  1. 为什么是向下搜索最大值和次大值值得出直径长度
  2. 为什么要遍历所有点,而不是直接输出顶点的最大值和次大值之和

另一种求法:两次dfs

  • 随便找一个点向下dfs,找到离该点最远的点
  • 再以这个最远的点为根节点,向下找离根节点最远的点
  • 这两个点的距离为直径,两点为直径的端点

若存在负权边,则无法使用两次 DFS 的方式求解直径。

证明过程

树的中心:以树的中心为整棵树的根时,从该跟到每个叶子节点的最长路径最短

求法:换根dp

  • 第一步和树形dp一样找出每个点向下搜索的最大值和次大值
  • 然后时以每个点向上搜索最大值,用父节点的信息更新子节点的信息
  • 父节点的也分为向上的最长路径和向下的最长路径,只需取两者中最大的路径更新子节点的相似最长路径即可
  • 但需要注意的是,父节点向下走的最大路径可能经过该子节点,这时,用父节点的次大值与父节点的向上最大值更新即可
  • 否则就用最大值和向上最大值更新
  • 最后遍历所有点的向下最大和向上最大,取该从某点出发的到某点的最长路径的最小值

树的重心:以树的重心为整课树的根时,它的最大子树最小(也就是删除该点后最大连通块最小)

求法:dfs记录每个点的子节点的数量,以及子树中的最大子子树,总节点个数n-子树中节点个数,则为非该点子树的最大连通量,最大子子树和非子树两者中最大的一者即为删除该点后的最大连通块。

树的直径,树的中心,树的重心相关推荐

  1. 模板 - 树上问题(树的直径、动态查询树的直径、树的重心)

    整理的算法模板合集: ACM模板 目录 一.树的直径 树形DP 两次DFS / BFS(找到直径的两个端点) 二.动态修改树的边权并求每个时刻的直径(线段树) 三.树的重心 一.树的直径 树的直径满足 ...

  2. 【leetcode-DFS】求根节点到叶节点数字之和/二叉树的最大路径和/路径总和/左叶子之和/树的直径

    文章目录 求根节点到叶节点数字之和 深度优先搜索 广度优先搜索 二叉树的最大路径和 DFS 路径总和1 深度优先搜索 广度优先搜索 路径总和2 回溯法 广度优先搜索 左叶子之和 递归 DFS 树的直径 ...

  3. 树的直径1——树的直径

    树的直径1--树的直径 目录 题目:树的直径1 题面 题目描述 输入描述 输出描述 样例输入 样例输出 数据范围 代码及思路 解题思路 AC代码 知识点:树的直径 定义 性质 查找"树的直径 ...

  4. P5895-[IOI2013]dreaming梦想【树的直径,结论】

    正题 题目链接:https://www.luogu.com.cn/problem/P5895 题目大意 nnn个点的一个森林,加入若干条长度为LLL的边使它变成一个树,求这棵树的最小直径. 解题思路 ...

  5. 树的直径,树的重心,树的分冶

    主要是利用了反证法: 假设 s-t这条路径为树的直径,或者称为树上的最长路 现有结论,从任意一点u出发搜到的最远的点一定是s.t中的一点,然后在从这个最远点开始搜,就可以搜到另一个最长路的端点,即用两 ...

  6. P1099 树的直径 DFS + 二分 / 尺取法

    题意 传送门 P1099 树网的核 在任意一条直径上求出的最小偏心距都相等. 树上只有一条直径时显然成立.当树有多条直径,它们必定相交,且中点汇聚于同一处,那么中心附近树的各条直径的重叠部分是相同的, ...

  7. [51nod] 1766树上的最远点对 树的直径 树剖LCA+ST表静态查询

    题意: 给你一棵带权树,q次查询,每次给出两个区间,[l1,r1][l2,r2][l_1,r_1] [l_2,r_2][l1​,r1​][l2​,r2​]从这两个区间中分别选择两个数字,使得这两个点的 ...

  8. 小A与欧拉路(牛客-树的直径)

    题解: 欧拉路:从图中任意一个点开始到图中任意一个点结束的路径,并且图中每条边只通过恰好一次 问你走完这树上所有的点最短路径是什么. 因为树是没有环的,所以你走到叶子结点的时候需要往回走,也就是再走一 ...

  9. luogu P4408 [NOI2003]逃学的小孩(树的直径)

    整理的算法模板合集: ACM模板 看了半天的题原来没有告诉你三个点的坐标,不然直接跑最短路即可.要求最长的时间,所以我们要自己找到三个点,而在树中最长的路径也就是树的直径.那么本题就可以简化为:在一棵 ...

最新文章

  1. Oracle 原理: 11g的启动和关闭
  2. SpringSecurity权限控制之异常处理方式一
  3. 据说这是熟练掌握python的爷们_dongbei 是一门基于 Python 3 二次开发的东北方言编程语言...
  4. 神奇的LINQ ---可以通过对象来查询数据
  5. kill -9都杀不掉的进程
  6. 【codevs1001】舒适的路线,心累的冰茶几
  7. c++ -- 重载、重写(覆盖)和隐藏的区别
  8. 解决element-ui中表格行点击事件和表格单元格点击事件冲突的问题
  9. Python 全栈开发二 python基础 字符串 字典 集合
  10. 非常吃惊,程序猿在工作中的幸福感居然是?????
  11. 开启Google Chrome浏览器加速模式
  12. 德米特里:玩世不恭大冒险 for Mac(冒险游戏)
  13. 企查猫app数据解密
  14. android七牛短视频sdk源码,七牛短视频sdk,七牛android直播端必须用七牛提供的sdk吗...
  15. PHP word ppt pdf 转图片
  16. android 苹果电脑底部图标滚动效果,JS实现仿苹果底部任务栏菜单效果代码
  17. 路由器上的usb接口有什么用_解决USB接口不够用,毕亚兹Type-C扩展坞体验测评
  18. 三连杆平面机器人的动力学
  19. MyBatis-批量update
  20. MySQL安装----最详细的教程(测试木头人)

热门文章

  1. WEB前端面试常见的问题及答案
  2. HTML5实时显示摄像头视频
  3. EF| CodeFirst 代码先行
  4. 串的子串(模式串)匹配算法
  5. k8s集群ClusterIP不能使用
  6. 瓦片地图面面观之缩放级别
  7. 51nod 1556 计算(默慈金数)
  8. MC0101 冰雪大冒险
  9. 疫情推动“宅经济”成为当前重要经济发展模式
  10. 图片复制word java_java poi实现word导出(包括word模板的使用、复制表格、复制行、插入图片的使用)...