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

简介: 如果我们删除了一条边,那么一定将其分成了两棵树,其中一棵树一定为原树的子树,那么我们就可以利用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

相关文章
|
16天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
3月前
|
算法
电子好书发您分享《超全算法笔试 模拟题精解合集》
电子好书发您分享《超全算法笔试 模拟题精解合集》
25 3
|
3月前
|
算法
电子好书发您分享《超全算法笔试 模拟题精解合集》
电子好书发您分享《超全算法笔试 模拟题精解合集》
26 2
|
28天前
|
机器学习/深度学习 算法 数据挖掘
请解释Python中的决策树算法以及如何使用Sklearn库实现它。
决策树是监督学习算法,常用于分类和回归问题。Python的Sklearn库提供了决策树实现。以下是一步步创建决策树模型的简要步骤:导入所需库,加载数据集(如鸢尾花数据集),划分数据集为训练集和测试集,创建`DecisionTreeClassifier`,训练模型,预测测试集结果,最后通过`accuracy_score`评估模型性能。示例代码展示了这一过程。
|
30天前
|
机器学习/深度学习 算法
随机森林算法是如何通过构建多个决策树并将它们的预测结果进行投票来做出最终的预测的?
【2月更文挑战第28天】【2月更文挑战第102篇】随机森林算法是如何通过构建多个决策树并将它们的预测结果进行投票来做出最终的预测的?
|
3月前
|
算法 容器
数据结构与算法之树的遍历
树的 “前” “中” “后” 遍历 //如果要再写一个树太费时间了,所以博主在这篇博客只给出核心代码并赋予GIF演示动画,望大家好好理解以对树的三种遍历方式有更为深刻的理解
42 0
|
2天前
|
算法 DataX
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
|
1月前
|
机器学习/深度学习 数据采集 算法
Python基础算法解析:决策树
Python基础算法解析:决策树
34 8
|
1月前
|
机器学习/深度学习 数据采集 算法
实现机器学习算法(如:决策树、随机森林等)。
实现机器学习算法(如:决策树、随机森林等)。
24 0
|
2月前
|
监控 算法 测试技术
【动态规划】【树形dp】【C++算法】968监控二叉树
【动态规划】【树形dp】【C++算法】968监控二叉树