算法笔试模拟题精解之“树的拆分”

简介: 如果我们删除了一条边,那么一定将其分成了两棵树,其中一棵树一定为原树的子树,那么我们就可以利用DFS序将树遍历一遍得出每个点的时间戳。

在线编程介绍

阿里云开发者社区在线编程产品,针对广大开发者学习、实践、面试、应聘、考试认证等打造的免费在线刷题神器。题库来自笔试模拟题、算法大赛模拟题等,界面整洁明了,操作简单,为用户营造专心答题的学习环境。点击链接开始体验:https://developer.aliyun.com/coding

题目描述

等级:困难
知识点:深度优先搜索/DFS、树状数组
查看题目:树的拆分

给你一个有n个节点的树,节点标号1-n。每个节点有一个权值w[i],一棵树的价值为树上所有不同的权值的数量。
现在你可以删除一条边,问删除一条边后形成的两棵新树的价值之和最大为多少。
第一行输入一个n,表示一共有n个节点(1 <= n <= 10^5)。
第二行输入n-1个数,表示第i+1个节点和第e[i]个节点有一条边相连(1 <= e[i] < i+1)
第三行输入n个数,第i个数表示第i个节点的权值wi。
输出一个数字,表示删除一条边后两棵树最大的价值和

示例1
输入:
3
[1,1]
[1,2,2]
输出:
3

解题思路:DFS

如果我们删除了一条边,那么一定将其分成了两棵树,其中一棵树一定为原树的子树,那么我们就可以利用DFS序将树遍历一遍得出每个点的时间戳。

DFS序即为每个点的在一次DFS中的遍历顺序,从定义可以知道,子树上的每个节点的DFS序一定连续,因此我们可以求出每棵子树所对应的区间,剩下的节点即为另一棵树。

此时我们就可以利用树状数组求每个区间里面不同的数的个数,由于一个子树区间可能会在数组中间,会将剩下的数字分为左右两部分,因此我们需要将原权值数组扩充一倍,然后进行计算。

需要注意的是,现在这个权值数组不是输入的权值数组,而是根据DFS序进行重新排序的数组。

是不是有思路了呢,点击链接立刻答题:>>查看题目:118.树的拆分

另有在线编程3月份比赛正式开启!机械键盘等你拿!
893-90-1.jpg

相关文章
|
5月前
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
119 1
|
2月前
|
算法
树的遍历算法有哪些?
不同的遍历算法适用于不同的应用场景。深度优先搜索常用于搜索、路径查找等问题;广度优先搜索则在图的最短路径、层次相关的问题中较为常用;而二叉搜索树的遍历在数据排序、查找等方面有重要应用。
42 2
|
3月前
|
存储 算法 关系型数据库
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
这篇文章主要介绍了多路查找树的基本概念,包括二叉树的局限性、多叉树的优化、B树及其变体(如2-3树、B+树、B*树)的特点和应用,旨在帮助读者理解这些数据结构在文件系统和数据库系统中的重要性和效率。
35 0
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
|
4月前
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
在数据密集型应用中,高效搜索算法至关重要。Trie树(前缀树/字典树)通过优化字符串处理和搜索效率成为理想选择。本文通过Python实战演示Trie树构建与应用,显著提升搜索性能。Trie树利用公共前缀减少查询时间,支持快速插入、删除和搜索。以下为简单示例代码,展示如何构建及使用Trie树进行搜索与前缀匹配,适用于自动补全、拼写检查等场景,助力提升应用性能与用户体验。
73 2
|
3月前
|
存储 算法
数据结构与算法学习十六:树的知识、二叉树、二叉树的遍历(前序、中序、后序、层次)、二叉树的查找(前序、中序、后序、层次)、二叉树的删除
这篇文章主要介绍了树和二叉树的基础知识,包括树的存储方式、二叉树的定义、遍历方法(前序、中序、后序、层次遍历),以及二叉树的查找和删除操作。
38 0
|
3月前
|
存储 算法 Java
数据结构和算法--分段树
数据结构和算法--分段树
26 0
|
6月前
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
【7月更文挑战第19天】Trie树,又称前缀树,是优化字符串搜索的高效数据结构。通过利用公共前缀,Trie树能快速插入、删除和查找字符串。
139 2
|
6月前
|
机器学习/深度学习 数据采集 算法
Python实现GBDT(梯度提升树)回归模型(GradientBoostingRegressor算法)项目实战
Python实现GBDT(梯度提升树)回归模型(GradientBoostingRegressor算法)项目实战
|
6月前
|
机器学习/深度学习 数据采集 算法
Python实现GBDT(梯度提升树)分类模型(GradientBoostingClassifier算法)并应用网格搜索算法寻找最优参数项目实战
Python实现GBDT(梯度提升树)分类模型(GradientBoostingClassifier算法)并应用网格搜索算法寻找最优参数项目实战

热门文章

最新文章