LeetCode LCP 34. 二叉树染色(树上DP)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

小扣有一个根结点为 root 的二叉树模型,初始所有结点均为白色,可以用蓝色染料给模型结点染色,模型的每个结点有一个 val 价值。
小扣出于美观考虑,希望最后二叉树上每个蓝色相连部分的结点个数不能超过 k 个,求所有染成蓝色的结点价值总和最大是多少?

示例 1:
输入:root = [5,2,3,4], k = 2
输出:12
解释:结点 534 染成蓝色,获得最大的价值 5+3+4=12

在这里插入图片描述

示例 2:
输入:root = [4,1,3,9,null,null,2], k = 2
输出:16
解释:结点 439 染成蓝色,获得最大的价值 4+3+9=16

在这里插入图片描述

提示:
1 <= k <= 10
1 <= val <= 10000
1 <= 结点数量 <= 10000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-cha-shu-ran-se-UGC
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 自底向上 DP
  • unordered_map<TreeNode*, unordered_map<int, int>> m; 定义:每个节点TreeNode*,该节点相连的蓝色点数量,最大的和
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {unordered_map<TreeNode*, unordered_map<int, int>> m;//每个节点TreeNode*,该节点相连的蓝色点数量,最大的和int n;
public:int maxValue(TreeNode* root, int k) {n = k;dfs(root);int ans = 0;for(auto it = m[root].begin(); it != m[root].end(); ++it){int v1 = it->second;ans = max(ans, v1);}return ans;}void dfs(TreeNode* root){if(!root)  return;dfs(root->left);dfs(root->right);if(m.count(root->left) && m.count(root->right)){for(auto it = m[root->left].begin(); it != m[root->left].end(); ++it){int n1 = it->first, v1 = it->second;for(auto it1 = m[root->right].begin(); it1 != m[root->right].end(); ++it1){int n2 = it1->first, v2 = it1->second;// root 不涂色,root相连的有色节点为0m[root][0] = max(m[root][0], v1+v2);if(n1+n2 < n){   // root 涂色m[root][n1+n2+1] = max(m[root][n1+n2+1], v1+v2+root->val);}}}}else if(m.count(root->left)){for(auto it = m[root->left].begin(); it != m[root->left].end(); ++it){int n1 = it->first, v1 = it->second;// root 不涂色,root相连的有色节点为0m[root][0] = max(m[root][0], v1);if(n1 < n){   // root 涂色m[root][n1+1] = max(m[root][n1+1], v1+root->val);}}}else if(m.count(root->right)){for(auto it = m[root->right].begin(); it != m[root->right].end(); ++it){int n1 = it->first, v1 = it->second;// root 不涂色,root相连的有色节点为0m[root][0] = max(m[root][0], v1);if(n1 < n){   // root 涂色m[root][n1+1] = max(m[root][n1+1], v1+root->val);}}}else{   // root 不涂色,root相连的有色节点为0m[root][0] = max(m[root][0], 0);// root 涂色m[root][1] = max(m[root][1], root->val);}}
};

880 ms 249.1 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

uart口图片_uart 加强了的串口调试助手,可以自动记录传输数据,并且显示图片,示波器等功能 Com Port 编程 267万源代码下载- www.pudn.com...

文件名称: uart下载 收藏√ [5 4 3 2 1 ]开发工具: C#文件大小: 10479 KB上传时间: 2014-06-06下载次数: 62提 供 者: 林元峰详细说明&#xff1a;加强了的串口调试助手&#xff0c;可以自动记录传输数据&#xff0c;并且显示图片&#xff0c;示波器等功能-Enhanced seri…

delphi 串口通信发送_关于串口通信232、485、422和常见问题,就没见过能讲这么清楚的...

先讲串口通信的一些基本概念&#xff0c;术语。如果对串口通信比较熟悉的&#xff0c;就当复习&#xff0c;如果哪里讲的不到位&#xff0c;欢迎及时指出。这里并不对串口的编程作讲解&#xff0c;主要是从应用的角度去讲一讲。因为更多的时候&#xff0c;都是产品做好了&#…

LeetCode 1822. 数组元素积的符号

文章目录1. 题目2. 解题1. 题目 已知函数 signFunc(x) 将会根据 x 的正负返回特定值&#xff1a; 如果 x 是正数&#xff0c;返回 1 。如果 x 是负数&#xff0c;返回 -1 。如果 x 是等于 0 &#xff0c;返回 0 。 给你一个整数数组 nums 。 令 product 为数组 nums 中所有元…

快速替换图片的组合-AE-样片!

模板下载网址&#xff1a;http://pan.baidu.com/s/1hqCbErM转载于:https://www.cnblogs.com/nedtwo/p/4278337.html

南昌理工学院计算机网络技术专业怎么样,南昌理工学院怎么样 重点专业是什么...

毕业季即将来临&#xff0c;报考的时候同学们和家长朋友们最关心的就是学校好不好的问题&#xff0c;想要了解学校有哪些特色专业、师资力量怎么样。下面小编整理了南昌理工学院的信息&#xff0c;供大家参考。南昌理工学院重点专业国家级特色专业&#xff1a;计算机科学与技术…

英特尔cpu发布时间表_英特尔10nm芯片开始大规模出货,先进制程时间表浮出水面...

多年延期之后&#xff0c;英特尔终于宣布其 10nm 芯片产品开始大量出货。近日&#xff0c;英特尔公布了公司 2019 年 Q3 财报。在财报会议中&#xff0c;英特尔透露了这一消息。具体而言&#xff0c;英特尔已有晶圆厂开始大批量生产 10nm 芯片&#xff0c;未来也还准备建立新厂…

matplotlib绘图_使用matplotlib库绘图

本代码演示对列表元素进行绘图并可视化代码如下&#xff1a;import matplotlib.pyplot as plt #导入matplotlib绘图库&#xff0c;并设置简称为pltlist1[i*2 for i in range(1,10)] #遍历range(1,10)里的元素&#xff0c;并每个乘以2&#xff0c;并将最终的列表赋值给list1plt.…

LeetCode 1824. 最少侧跳次数(DP)

文章目录1. 题目2. 解题1. 题目 给你一个长度为 n 的 3 跑道道路 &#xff0c;它总共包含 n 1 个 点 &#xff0c;编号为 0 到 n 。 一只青蛙从 0 号点第二条跑道 出发 &#xff0c;它想要跳到点 n 处。然而道路上可能有一些障碍。 给你一个长度为 n 1 的数组 obstacles &a…

i5集显和独显的区别_集显核显独显有哪些区别 集显核显独显区别介绍【详解】...

显卡是除处理器之外最受大家关心的硬件装备了&#xff0c;要是显卡配置不到位&#xff0c;其他再好都是浮云&#xff0c;而对于游戏玩家来说&#xff0c;显卡性能差的话更是影响游戏的运行&#xff0c;可折腾人了。今天小编为大家分享“集显”、“核显”和“独显”这3个显卡概念…

桌面软件打开都会变成计算机,我不小心把电脑界面程序的打开方式都变成一种了,怎么还原啊?...

如果不小心把电脑桌面程序的打开方式错误的设置成一种后&#xff0c;可以通过以下几种方法还原&#xff1a;方法一&#xff1a;可以通过360里的“360电脑修复专家”功能&#xff0c;进入后&#xff0c;在对话框里输入“电脑的图标异常”&#xff0c;之后立即会自动解决&#xf…

postman 使用_Postman简单使用

今天主要讲解下Postman的简单使用。在使用前&#xff0c;首先需要了解一下什么是Postman&#xff0c;它可以用来做什么&#xff1f;1、 Postman是一款自动化测试的工具&#xff0c;它可以方便的处理HTTP的请求(get、post、put、delete等)。本文主要讲解get和post的使用。2、 那…

中山大学校队选拔赛第二试题试题3【Compressed suffix array】-------2015年2月8日

一&#xff1a;题目大意 本题通过给定三个数组S0&#xff0c;P&#xff0c;S&#xff0c;其中S0是1到2n的一个排列&#xff0c;P具有2n个整数&#xff0c;且满足&#xff1a; 数组S是把数组S0中所有奇数元素全部删除并将所有偶数元素除以2并按照原来的相对顺序进行排列而得。 现…

LeetCode 1825. 求出 MK 平均值(set + queue)

文章目录1. 题目2. 解题1. 题目 给你两个整数 m 和 k &#xff0c;以及数据流形式的若干整数。 你需要实现一个数据结构&#xff0c;计算这个数据流的 MK 平均值 。 MK 平均值 按照如下步骤计算&#xff1a; 如果数据流中的整数少于 m 个&#xff0c;MK 平均值 为 -1 &#…

vue热更新无法关闭_vue-cli3热更新失效

vue-cli3热更新失效问题公司的一个使用vue-cli3搭建的项目一直无法热更新&#xff0c;每次保存代码后都需要手动刷新页面才能看到修改之后的页面&#xff0c;作为一个强迫症晚期患者&#xff0c;那肯定是忍不了。经过个人研究学习&#xff0c;修复好了项目热更新问题&#xff0…

职高计算机选修6知识点,(计算机基础考试7.doc

试卷编号&#xff1a;9619所属语言&#xff1a;计算机基础试卷方案&#xff1a;WINhy试卷总分&#xff1a;100分共有题型&#xff1a;4种一、单选 共40题 (共计40分)第1题 (1.0分) 题号:5923 难度:中 第81章一个六位的二进制数,如果其最高位和最低位都为1,则在下列十进制数中,可…

python中importlib模块安装_Python中标准模块importlib详解

Python中标准模块importlib详解 模块简介 Python提供了importlib包作为标准库的一部分。目的就是提供Python中import语句的实现&#xff08;以及__import__函数&#xff09;。另外&#xff0c;importlib允许程序员创建他们自定义的对象&#xff0c;可用于引入过程&#xff08;也…

HiveQL:查询

文章目录1. select from1.1 正则表达式指定列1.2 使用列值计算1.3 使用函数1.4 limit 限制返回行数1.5 别名 as name1.6 case when then 语句2. where 语句3. JOIN 优化4. 抽样查询5. union all学自《hive编程指南》 1. select from hive (default)> create table employe…

unity鼠标控制镜头旋转_Unity Camera教程之 摄像机跟随鼠标移动而旋转

FollowMouseMove 脚本具体内容如下&#xff1a;using UnityEngine;public class FollowMouseMove : MonoBehaviour {public float moveSpeed 5.0f;// Use this for initializationvoid Start(){}// Update is called once per framevoid Update(){// 获得鼠标当前位置的X和Yfl…

html里span和div,HTML div和span

块代码和1...ccwTest {font-family: .PingFang SC;">;color:white;margin:18px;padding:16px;}这些是文字这里是内容,改变这些文字的颜色或者是改变其他属性需要写在style里 ccwTest是名字,相当于ios中的对象名 通过这个对象名找到是调用的哪个方法2..span.red {color:…

python闭包详解函数_详解python函数的闭包问题(内部函数与外部函数详述)

python函数的闭包问题&#xff08;内嵌函数&#xff09; >>> def func1(): ... print (func1 running...) ... def func2(): ... print (func2 running...) ... func2() ... >>> func1() func1 running... func2 running... 内部函数func2作用域都在外部函数…