首页 > 其他分享 >树上的一些基础操作

树上的一些基础操作

时间:2024-07-08 11:31:13浏览次数:8  
标签:int 路径 基础 操作 树上 d2 最长 d1

树的直径

树的直径就是树上最远两点间简单路径的距离,也就是树上最长的简单路径。

可以用 树形 dp 的思想做

考察树上任意节点 u,若它有 i 条子树,则就有 i 条过 u 点(严格是以 u 为端点)的路径,要找到 悬挂 在 u 点的最长路径,贪心地想就是找到 最长路径次长路径 合起来就是过 u 点的可能解

设 d1,d2 分别表示最长路径,次长路径,边界肯定就是 0(只有该点)

对于 (u, v) 方向上的子树路径长度 d,可以递推求解

  • d > d1,则 d2 = d1, d1 = d
  • d > d2,则 d2 = d

结果就是对所有点的最长路径取最大值 \(\max\limits_{i\in V}\{d1_i + d2_i\}\),复杂度 \(O(n)\)

int dfs(int u, int fa)
{
	int d1 = 0, d2 = 0;
	
	for (re i = h[u]; i; i = e[i].next)
	{
		int v = e[i].to, w = e[i].w;
		if (v == fa) continue;
		
		int d = dfs(v, u) + w;
		if (d > d1) d2 = d1, d1 = d;
		else if (d > d2) d2 = d;
	}
	res = max(res, d1 + d2);
	
	return d1;
}

标签:int,路径,基础,操作,树上,d2,最长,d1
From: https://www.cnblogs.com/wenzieee/p/18289578

相关文章

  • 0算法基础——深度优先搜索(c++)
            搜索是对一个事物的查询。他可以给出两点最短路,还能求方案数等等。好的,正文开始:深度优先搜索    深度优先搜索(dfs)顾名思义就是从深度的角度出发进行搜索。具体来讲,就是完成一个步骤后将它的每一个子步骤都试一遍,注意是先搜完子步骤(一般认为子步骤层......
  • 数据库和JDBC:Java中的数据库操作与连接池管理
    引言在Java应用程序中,数据库操作是一项基本且关键的功能。Java数据库连接(JDBC)是Java语言中用于执行SQL语句的API,它提供了一种标准的方法,用于连接和操作数据库。此外,数据库连接池是提高数据库操作性能的重要工具,它允许多个客户端共享一个固定数量的数据库连接,而不是为每个用户......
  • 操作系统面试八股文
    1.进程,线程和协程的区别和联系进程,线程和协程是计算机中多任务处理的三种不同的概念。进程:进程是操作系统中的一个概念,是系统中资源分配的基本单位。每个进程有独立的内存空间、程序和数据。进程之间需要通过进程间通信来实现数据共享和通信。线程:线程是程序执行的最小......
  • 木舟0基础学习Java的第十三天(Collection集合框架)
    Collection(根接口)集合框架数组和集合的区别:数组:既可以存储基本数据类型(值)又可以存储引用数据类型(地址值)    长度:数组的长度是固定的不能自动增长    使用环境:元素个数固定的时候集合:只能存储引用数据类型(对象)也可以存储基本数据类型(存储基本数据类型会自动......
  • 哪里有主机游戏店收费系统,佳易王电玩ps5ps4计时计费系统操作教程
     哪里有主机游戏店收费系统,佳易王电玩ps5ps4计时计费系统操作教程以下软件操作教程以,佳易王计时计费管理系统为例说明软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载一、软件程序图文讲解1、主机游戏计时软件、电玩店计费软件、计时计费控制系统开......
  • JS根据json数组多个字段排序及json数组常用操作
    本文转载自:https://www.jb51.net/article/162623.htm js根据json数组多个字段排序的实现代码如下所示:1/**数组根据数组对象中的某个属性值进行排序的方法2*使用例子:newArray.sort(sortByArr(['number'],false))//表示根据number属性降序排列;若第二个参数不传递,默......
  • 01、基础介绍
    Kubernetes介绍和各组件盘点01、K8S总览Kubernetes(K8s),用于自动部署、扩容、缩容和管理容器化应用程序的开源系统。它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现。Kubernetes源自Google15年生产环境的运维经验,同时凝聚了社区最佳创意和实践。简单讲,K8s就是一......
  • 机械学习—零基础学习日志008(PAC模型)
    PAC模型——概率近似正确模型拿到一个数据,得到一个模型, 是真实的结果。因此  可以表示成预测结果准不准的公式。比方说西瓜切开之后,是不是好西瓜就是y,而这个根据颜色,纹理,根蒂,判断西瓜好不好就是模型f(x)。表示式希望其差别小于一个很小的数,比如说0.0001,那非常准确,......
  • 第三章 MATLAB矩阵的操作的目录【最重要的一章】第一节~
    3.2.1向量的创建方法(1)直接输入法向量元素需要用中括号“[]”括起来,元素之间用空格、逗号、分号或回车键分隔,就可以创建对应的向量。若元素之间用空格、逗号分隔,创建的是行向量;用分号、回车键分隔,创建的是列向量。(2)冒号法:最常用用命令A:step:B来创建一个行向量。A是起始值......
  • 西电软工操作系统复习
    写在前面:本文为本人整理归纳的西电卢本伟的博客和李航、高海昌复习课画的重点,把西电卢本伟的博客内容粘过来了,根据我的理解改了一些内容(考试前对着背就好其中写的书页是os的中文黑皮书上的考前最好把李航平时布置的作业都写一遍,把答案都背下来(这byd今年出的题全是自己班上的......