最大化硬币,使根到叶子路径和为正2025 年 2 月 6 日 | 阅读 5 分钟 引言在这个问题中,我们给定一棵树,它有 N 个顶点,根节点在 node[0] 处。树的所有边由数组 edges[][] 给出。还有另一个数组 arr[],它代表硬币[]。arr[] 的大小是 N。我们必须选择任意一个节点并收集该节点中存在的所有硬币。我们的主要任务是找到收集到的最大硬币数量。我们必须以这样一种方式完成任务:从根节点到任何叶子节点的路径和保持为正(从根节点到叶子节点的路径和是根节点和叶子节点之间简单路径上节点中存在的总硬币)。 让我们通过例子来理解这一点。 示例-1输入 我们得到输入如下: N = 6, A[] = {5, 2, 5, 2, 1, 1 }, edges[][2] = {{0, 1}, {0, 2}, {0, 3}, {2, 4}, {4, 5}} 输出 上述输入的输出是 11。 说明 这里我们必须从节点 1、2、3、4 和 5 收集硬币。总硬币 = 2 + 5 + 2 + 1 + 1 = 11。 由于根节点 0 为零,因此从根节点到任何叶子的任何路径都将是非零的。 示例-2输入 我们得到输入如下: N = 7, A[] = { 20, 10, 9, 7, 4, 3, 5 }, edges[][2] = { {0, 1}, {0, 2}, {1, 3}, {1, 4}, {2, 5}, {2, 6} } 输出 上述输入的输出是 40。 解释:我们可以从节点 0、2、3 和 4 收集硬币。总硬币 = 20 + 9 + 7 + 4 = 40
因此,从根节点 0 到任何叶子的路径和是非零的。 方法为了解决上述任务,我们有以下思路。 观察有两种方法可以创建子树根。第一种是收集子树根中可用的硬币或其所有后代中存在的所有硬币。但这种方法存在一个问题。问题是找到保持从根节点到任何叶子节点的路径和非零所需的最小硬币。 我们可以借助树形动态规划方法来解决这个问题。 为了存储从节点 v 到任何叶子节点的路径和保持所需的最小硬币,我们必须借助 DP[V]。 转换: dp[v] = min(A[v], ∑dp[ui]) 分步算法为了解决这个问题,我们必须遵循以下步骤。
让我们借助编程语言来看看上面的算法。 C++ 中的实现输出 ![]() 说明 在上面的代码中,我们已经实现了算法。此外,我们还创建了 dfs 函数。我们用 C++ 编程语言实现了整个逻辑。 Java 实现输出 ![]() 说明 在上面的代码中,我们已经实现了算法。此外,我们还创建了 dfs 函数。我们用 Java 编程语言实现了整个逻辑。 时间复杂度 这种方法的时间复杂度是 O(N),其中 N 表示树中的节点数。 空间复杂度 这种方法的空间复杂度是 O(N)。 下一主题以二维方式打印二叉树 |
设计一种支持常量时间插入、删除、搜索和 getRandom 的数据结构 设计一种允许常量时间插入、删除、搜索和随机访问的数据结构是一个有趣的计算机科学问题。获得这些活动的一致时间复杂度有时需要权衡...
5 分钟阅读
IPv4 地址是分配给连接到使用 Internet Protocol version 4 (IPv4) 进行通信的计算机网络的每个设备的数字标识。它是一个 32 位二进制数,分为四个八位字节(8 位数字),通常以人类可读的形式表示为一系列...
阅读 4 分钟
在数据结构和计算机科学的广阔领域中,它们是管理动态集合的独特而有效的结构。它们是二叉搜索树 (BST) 的类型,除了支持插入、删除和搜索操作外,还可以在需要时进行自平衡。即使在倾斜的数据中...
阅读 6 分钟
问题描述给定一个长度为 n 的 0 索引整数数组 nums 和一个整数 k,返回满足以下条件的对 (i, j) 的数量:0 <= i < j <= n - 1 且 nums[i] * nums[j] 可被 k 整除。Java 方法 1 频率计数 import java.util.Arrays; import java.util.HashMap; import...
阅读 6 分钟
简介在更广泛的子数组求和问题类别中,该问题是一项复杂的算法任务。目标是在数组的潜在连续子数组中找到第 K 大的和。此问题在查找...
阅读9分钟
二叉树是 DSA 领域中的基本数据结构。它的众多应用包括数据组织、搜索和排序算法。有了节点级别的概念,找到一个有效且适用的公式来计算节点级别就变得非常容易。级别节点在...
阅读 6 分钟
本文比较并对比了哈希表和 STL Map。哈希表是如何工作的?如果输入的数量很少,可以使用哪些数据结构选项来代替哈希表?哈希表通过调用一个...来存储一个值。
阅读 4 分钟
双端优先队列简介 双端优先队列 (DEPQ) 是一种数据结构,它存储一组元素,其中每个元素都与一个优先级或值相关联。可以根据优先级从队列的两端插入和删除元素。...
阅读 15 分钟
结构是一种复合数据类型,它定义了一组变量,这些变量要在内存块中以一个名称进行分组。它允许通过使用指向结构的单个指针来访问不同的变量。语法 struct structure_name { ...
阅读1分钟
2-3 树 2-3 树与树相同,但它有一些不同的属性,例如任何节点可以有一个或两个值。因此,2-3 树中有两种类型的节点:单值节点 如果一个节点是单值的,那么它有两个……
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India