树的直径(两次最远法)

2023-11-23 01:32
文章标签 直径 两次 最远

本文主要是介绍树的直径(两次最远法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原题链接

树中的最长路径称为树的直径
一棵树可以有多条直径,他们的长度相等。

两次最远法

步骤:

  • 任取一个结点 u u u,找出树中距 u u u最远的结点,记为 v v v
  • 再以 v v v作为起点,找出树中距 v v v最远的结点,记为 w w w
  • v , w v,w v,w之间的距离即树的直径

显然,如果 v v v是直径的一端,那么距其最远的结点 w w w 一定是直径的另一端。
我们只需证明:以任意结点作为起点,所找到的距其最远的点是直径的一个端点

在这里插入图片描述

若树中存在负权边,则无法用该方法求直径。
扩展阅读

DFS实现

由于树中任意一点到其余所有点的路径都是唯一的,即任意一点到其余所有点的距离都是固定的,因此可以以某一个点作为起点进行DFS,如此便可求出其余所有点到该点的距离。

struct Edge
{int ne, w;
};
vector<Edge> h[N];void dfs(int u, int d) //搜索到了结点u
{dist[u] = d;st[u] = true;for (auto edge :

这篇关于树的直径(两次最远法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/414365

相关文章

hdu1254(嵌套bfs,两次bfs)

/*第一次做这种题感觉很有压力,思路还是有点混乱,总是wa,改了好多次才ac的思路:把箱子的移动当做第一层bfs,队列节点要用到当前箱子坐标(x,y),走的次数step,当前人的weizhi(man_x,man_y),要判断人能否将箱子推到某点时要嵌套第二层bfs(人的移动);代码如下:

zoj3820(树的直径的应用)

题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。 思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。 代码如下: #include <stdio.h>#include <string.h>#include <algorithm>#include <map>#

poj 1849 Two(树形dp求直径)

树的直径:一棵树中两个点间的最长距离。 Description The city consists of intersections and streets that connect them.  Heavy snow covered the city so the mayor Milan gave to the winter-service a list of streets that ha

useEffect传递的空数组,为什么初始化的时候调用了两次

这是我的代码: import React, { useEffect } from 'react'import './scss/MyScene.scss'import Three from '@/common/three'export default function MyScene() {var three;useEffect(() => {three = new Three('my_sce

POJ 1985 Cow Marathon(树的直径)

题目链接 题意:给出一棵树,求出这个树的直径 解答:任选一点进行dfs,会找到一个最远点s,在以这个最远点s进行dfs,会找到一个最远点是t,那么s-t就是树的直径。 //#include<bits/stdc++.h>#include<cstdio>#include<algorithm>#include<vector>#include<cstring>using namespace

YOLOv5改进 | 模块融合 | C3融合 ghost + DynamicConv 【两次融合 + 独家改进】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录: 《YOLOv5入门 + 改进涨点》专栏介绍 & 专栏目录 |目前已有70+篇内容,内含各种Head检测头、损失函数Loss、Backbone、Neck、NMS等创新点改进 本文介绍了一种C3_GhostDynamicCon

YOLOv8改进 | 模块融合 | C2f融合 ghost + DynamicConv 【两次融合 + 独家改进】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有100+篇内容,内含各种Head检测头、损失函数Loss、Backbone、Neck、NMS等创新点改进——点击即可跳转  本文介绍了一种C2f_GhostD

mybatis Association标签 分两次sql查询时,参数传递问题

直接给个例子,该例子来自:http://www.cnblogs.com/xdp-gacl/p/4264440.html <!-- 37 方式二:嵌套查询:通过执行另外一个SQL映射语句来返回预期的复杂类型38 SELECT * FROM class WHERE c_id=1;39 SELECT * FROM teacher WHERE t_id=1

《死侍与金刚狼》重回连续3天位居北美票房榜首《眨眼两次》表现平平 《乌鸦》票房惨淡

《死侍与金刚狼》连续3天位居榜首 全球票房12.11亿美元 佐伊·克拉维茨 (Zoë Kravitz) 的导演处女作《眨眼两次》 (Blink Twice) 以 730 万美元的票房排名第四;《乌鸦》未能大获成功。 娜奥米·阿基和查宁·塔图姆在《眨眼两次》中 随着电影旺季的结束, 夏末票房的新玩家们艰难地找到自己的立足点。 续拍影片《死侍与金刚狼》、《异形:罗慕

SDUT OJ 3045 迷之图论 (树的直径)

题目地址:SDUT OJ 3045 这题比赛的时候想的差不多。。但是总是觉得不对。。写了一次就没再写,然后删了。。当时没想到的是第二次求出来的就是最长链。。当时想到的两次bfs找最大值(这一种方法其实结果也对。。TAT。。),还有找到点后在回溯减去重点等等。。但总觉得好像都不太对。。。赛后才知道这题原来是树的直径。。。。。牡丹江区域现场赛的时候遇到过,不过赛后也没看。。。 找树的直径的方法其实