LeetCode 1443. 收集树上所有苹果的最少时间(自底向上DFS)

1. 题目

给你一棵有 n 个节点的无向树,节点编号为 0 到 n-1 ,它们中有一些节点有苹果。
通过树上的一条边,需要花费 1 秒钟。
你从 节点 0 出发,请你返回最少需要多少秒,可以收集到所有苹果,并回到节点 0 。

无向树的边由 edges 给出,其中 edges[i] = [fromi, toi] ,表示有一条边连接 from 和 toi 。
除此以外,还有一个布尔数组 hasApple ,其中 hasApple[i] = true 代表节点 i 有一个苹果,否则,节点 i 没有苹果。

示例 1:
在这里插入图片描述

输入:n = 7, edges = [[0,1],[0,2],[1,4],[1,5],[2,3],[2,6]], 
hasApple = [false,false,true,false,true,true,false]
输出:8 
解释:上图展示了给定的树,其中红色节点表示有苹果。
一个能收集到所有苹果的最优方案由绿色箭头表示。

示例 2:
在这里插入图片描述

输入:n = 7, edges = [[0,1],[0,2],[1,4],[1,5],[2,3],[2,6]], 
hasApple = [false,false,true,false,false,true,false]
输出:6
解释:上图展示了给定的树,其中红色节点表示有苹果。
一个能收集到所有苹果的最优方案由绿色箭头表示。示例 3:
输入:n = 7, edges = [[0,1],[0,2],[1,4],[1,5],[2,3],[2,6]], 
hasApple = [false,false,false,false,false,false,false]
输出:0提示:
1 <= n <= 10^5
edges.length == n-1
edges[i].length == 2
0 <= fromi, toi <= n-1
fromi < toi
hasApple.length == n

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-time-to-collect-all-apples-in-a-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 由题目条件可知向上走的路径只有1个分支,把反向的路径存在哈希map里
  • 遍历hasApple数组,对有苹果的序号,进行dfs往上找,找到一条边,就在哈希表里删除一条
  • 最后返回边的个数乘以2
class Solution {
public:int minTime(int n, vector<vector<int>>& edges, vector<bool>& hasApple) {unordered_map<int,int> up;//向上走的路径for(vector<int> & e : edges)up[e[1]] = e[0];int s = 0;for(int i = 0; i < hasApple.size(); ++i){if(hasApple[i])dfs(i, up, s);}return 2*s;}void dfs(int i, unordered_map<int,int>& up, int& s){if(up.count(i)){s++;int to = up[i];//上层节点up.erase(i);//删除边dfs(to,up,s);}}
};

360 ms 56.3 MB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475911.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用多线程句柄设置鼠标忙碌状态

当我们在读取数据的时候&#xff0c;或者处理大量数据的时候可能需要把鼠标设置为忙碌状态&#xff0c;等待返回结果。下面的代码可以帮忙实现这点&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using Syste…

java怎吗从磁盘读文件_编写一个Java应用程序,该程序使用FileInputStream类,实现从磁盘读取本应用程序源代码文件,并将文件内容显示在屏幕上。...

满意答案x786741812013.05.10采纳率&#xff1a;42% 等级&#xff1a;12已帮助&#xff1a;14476人import java.io.FileInputStream;import java.io.InputStreamReader;import java.io.BufferedReader;import java.io.IOException;import java.io.FileNotFoundException;pub…

漂亮的博客搜索框

看到漂亮的搜索框&#xff0c;收藏... 主要用背景图片和输入框和链接隐藏完成。 可以在IE6,ff&#xff0c;chorme下兼容... <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quo…

LeetCode 518. 零钱兑换 II(动态规划)

1. 题目 给定不同面额的硬币和一个总金额。 写出函数来计算可以凑成总金额的硬币组合数。 假设每一种面额的硬币有无限个。 示例 1: 输入: amount 5, coins [1, 2, 5] 输出: 4 解释: 有四种方式可以凑成总金额: 55 5221 52111 511111示例 2: 输入: amount 3, coins [2] 输…

编写Web前端代码的注意事项

1. 最好在html标签之前添加一句类似于 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" > 的代码&#xff0c;该代码表示遵循W3C的某一套标准&#xff0c;具体使用哪套标准因人而异。 使用…

LeetCode 863. 二叉树中所有距离为 K 的结点(公共祖先/ DFS+BFS)

文章目录1. 题目2. 解题2.1 公共祖先2.2 建图BFS1. 题目 给定一个二叉树&#xff08;具有根结点 root&#xff09;&#xff0c; 一个目标结点 target &#xff0c;和一个整数值 K 。 返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。 示例 …

ioctl操作

ioctl操作传统上ioctl函数是用于那些普遍使用&#xff0c;但不适合归入其他类别的任何特性的系统接 口。Posix去掉了ioctl&#xff0c;它通过创建特殊的其功能已被Posix标准化的包裹函数来代替ioctl。这一章介绍和网络 编程有关的ioctl操作。1. ioctl函数int ioctl(int d, int …

java用栈处理四则运算_Java 用栈处理四则运算

import java.util.Arrays;import java.util.HashMap;import java.util.Map;import java.util.Stack;import java.util.regex.Matcher;import java.util.regex.Pattern;/*** 目前只能做简单的四则运算&#xff0c;不支持浮点数和其他符号&#xff0c;不支持多线程* 计算步骤&…

LeetCode 846. 一手顺子(map)

1. 题目 爱丽丝有一手&#xff08;hand&#xff09;由整数数组给定的牌。 现在她想把牌重新排列成组&#xff0c;使得每个组的大小都是 W&#xff0c;且由 W 张连续的牌组成。 如果她可以完成分组就返回 true&#xff0c;否则返回 false。 示例 1&#xff1a; 输入&#xf…

25 To Life

《25 To Life 》 too late for the other side 现在回头为时已晚 caught in a change 由于一次变故 25 to life 25岁时,即决定了一生 too late for the other side 现在回头为时已晚 caught in a change 由于一次变故 25 to life 25岁时,即决定了一生 …

多线程 流水线 java_Java Lock锁多线程中实现流水线任务

下面程序代码通过使用Lock锁执行简单的流水线任务&#xff1a;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/*** author lzq* data 2020/4/29 0029 - 下午 9:48*/public class Test…

LeetCode 962. 最大宽度坡(单调栈)

1. 题目 给定一个整数数组 A&#xff0c;坡是元组 (i, j)&#xff0c;其中 i < j 且 A[i] < A[j]。这样的坡的宽度为 j - i。 找出 A 中的坡的最大宽度&#xff0c;如果不存在&#xff0c;返回 0 。 示例 1&#xff1a; 输入&#xff1a;[6,0,8,2,1,5] 输出&#xff1…

java 加载资源文件

ClassLoader提供了两个方法用于从装载的类路径中取得资源&#xff1a; public URL getResource(String name); public InputStream getResourceAsStream(String name);这里name是资源的类路径&#xff0c;它是相对与“/”根路径下的位置。getResource得到的是一个URL对象来定位…

Java用链表写图书管理_C语言链表实现图书管理系统

之前参照网上的资料用链表实现了图书管理系统&#xff0c;包括简单的增删改查功能以及借书还书功能&#xff0c;我是VC6.0下写的一个控制台程序&#xff0c;格式参照的网上的。在动手编码之前&#xff0c;你需要理清自己的思路。首先&#xff0c;需要确定图书馆里系统中主要有那…

【Kaggle】Intermediate Machine Learning(缺失值+文字特征处理)

文章目录1. Introduction2. Missing Values 缺失值处理3. Categorical Variables 文字变量处理from https://www.kaggle.com/learn/intermediate-machine-learning下一篇 &#xff1a;【Kaggle】Intermediate Machine Learning&#xff08;管道交叉验证&#xff09; 1. Intro…

VB6调用API打开目标文件所在文件夹且选中目标文件

Option Explicit 模块名称: mOpenFolderAndSetFileFocus 作者: 唐细刚 时间: 2010-08-22 功能: VB6调用API打开目标文件所在文件夹且选中目标文件 注&#xff1a; 由于调用 Explorer.exe /select 方式会使系统产生多余的 Explorer.exe 进程 所以还是API来实现较好…

python 保存文件 吃内存_孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化...

孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化(完整学习过程屏幕记录视频地址在文末&#xff0c;手写笔记在文末)一、什么是序列化与反序列化序列化是指将内存中的数据进行指定规则的格式梳理&#xff0c;使之方便按一定格式保存到文件中。我的理…

【Kaggle】Intermediate Machine Learning(管道+交叉验证)

文章目录4. Pipelines 管道5. Cross-Validation 交叉验证上一篇&#xff1a;【Kaggle】Intermediate Machine Learning&#xff08;缺失值文字特征处理&#xff09; 下一篇&#xff1a;【Kaggle】Intermediate Machine Learning&#xff08;XGBoost Data Leakage&#xff09; …

ASP.NET2.0导出Word文档(C#导出DOC)

在网络上看到很多关于ASP.NET导出DOC文档的例子&#xff0c;有的干脆就直接将html页面不做任何处理直接导出为DOC文件&#xff0c;但是那样会有很多错误&#xff0c;例如将某些控件显示为图片。我还曾经见过微软为中国某个大公司制作的一个XX系统&#xff0c;导出的DOC文件实际…