当前位置: 首页 > ops >正文

leetcode1443. 收集树上所有苹果的最少时间-medium

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 1 <= n <= 10^5 1<=n<=105
edges.length == n - 1
edges[i].length == 2
0 < = a i < b i < = n − 1 0 <= a_i < b_i <= n - 1 0<=ai<bi<=n1
hasApple.length == n

2 solution

x, y = dfs(u): x: 以 u 为根的子树需要的步数, y : u 子树上有没有苹果

代码

class Solution {/** dfs(u): 以 u 为根的子树需要的步数*/const static int N = 1e5 + 1;vector<int> e[N];vector<bool> has;pair<int, bool> dfs(int u, int p) {int ans = 0;bool z = has[u];for (int v: e[u]) {if (v != p) {auto [x, y] = dfs(v, u);if(y) ans += x + 2, z = true;}}return {ans, z};}public:int minTime(int n, vector<vector<int>> &edges, vector<bool> &hasApple) {for (auto &x: edges) {e[x[0]].push_back(x[1]);e[x[1]].push_back(x[0]);}has = hasApple;return dfs(0, -1).first;}
};

结果

在这里插入图片描述

http://www.xdnf.cn/news/11896.html

相关文章:

  • Oracle数据库笔记
  • Windows下运行Redis并设置为开机自启的服务
  • @Prometheus动态配置管理-ConsulConfd
  • ArcGIS Pro 3.4 二次开发 - 地图探索
  • unix/linux,sudo,其基本概念、定义、性质、定理
  • 705SJBH超市库存管理系统文献综述
  • 关于面试找工作的总结(四)
  • 【无标题】图着色问题的革命性解决方案:拓扑膨胀-收缩对偶理论
  • 【黄金评论】美元走强压制金价:基于NLP政策因子与ARIMA-GARCH的联动效应解析
  • react+taro 开发第五个小程序,解决拼音的学习
  • 如果安装并使用RustDesk
  • TDengine 在电力行业如何使用 AI ?
  • win32com.client模块 —— Python实现COM自动化控制与数据交互
  • Linux系统iptables防火墙实验拓补
  • 77、完全植入式脑机接口神经数据编码解码数据处理等问题答疑[嘿!快看,馒头老师在这里蹲着!]
  • 详解Jenkins Pipeline 中git 命令的使用方法
  • Kubernetes 网络方案:Flannel 插件全解析
  • 常用的录音芯片型号有哪些?
  • 高并发区块链系统实战:从架构设计到性能优化
  • NFS的基本配置
  • Java中的多态
  • Java SpringBoot 调用大模型 AI 构建智能应用实战指南
  • 在树莓派上添加音频输入设备的几种方法
  • Rust学习(1)
  • 采用 Docker GPU 部署的 Ubuntu 或者 windows 桌面环境
  • Elasticsearch中的刷新(Refresh)和刷新间隔介绍
  • 【Zephyr 系列 7】BLE 数据透传系统设计与实现:双向通信、缓冲区与状态同步全解析
  • c++第6天--运算符重载
  • Linux基础开发工具——yum工具
  • Flutter快速上手,入门教程