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,一经查实,立即删除!

相关文章

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;计算机科学与技术…

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…

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 &#…

maven deploy plugin_Maven快速上手

作者&#xff1a;u_7deeb657158f出自&#xff1a;ITPUB博客原文&#xff1a;blog.itpub.net/69956102/viewspace-2726121/创建项目首先需要创建一个用于存储项目的文件夹&#xff0c;在控制台中输入以下命令&#xff1a;mvn archetype:generate -DgroupIdcom.mycompany.app -Da…

.net string format

转自&#xff1a;http://www.cnblogs.com/jobs2/p/3948049.html 转自&#xff1a;http://jingyan.baidu.com/article/48206aeaf8c52f216ad6b300.html 1、格式化货币&#xff08;跟系统的环境有关&#xff0c;中文系统默认格式化人民币&#xff0c;英文系统格式化美元&#xff0…

python画饼图_百度飞桨PaddlePaddle之[Python小白逆袭大神]7天训练营

第三次参加百度的7天训练营了这次参加的主题是【Python小白逆袭大神】&#xff0c;不过你别看是小白逆势。。。除非你一开始参加就逆袭完&#xff0c;不然你真的是python小白&#xff0c;这个课程还是有难难度的。说一下个训练营的特点版。这个营从python一些基础练习-->数据…

潍坊学院的计算机类怎么样,潍坊学院教育技术学专业怎么样?有知道的麻烦说下,谢谢!...

潍坊学院教育技术学专业怎么样&#xff1f;有知道的麻烦说下&#xff0c;谢谢&#xff01;以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;潍坊学院教育技术学专业怎么样&#xff1f;有知道的…

c++ class struct同名_C/C++面向对象编程之封装

点击“蓝字”关注我们吧前言&#xff1a;何为面向过程&#xff1a;面向过程&#xff0c;本质是“顺序&#xff0c;循环&#xff0c;分支” 面向过程开发&#xff0c;就像是总有人问你要后续的计划一样&#xff0c;下一步做什么&#xff0c;再下一步做什么&#xff0c;意外、事物…

LeetCode 1718. 构建字典序最大的可行序列(贪心+回溯)

文章目录1. 题目2. 解题1. 题目 给你一个整数 n &#xff0c;请你找到满足下面条件的一个序列&#xff1a; 整数 1 在序列中只出现一次。2 到 n 之间每个整数都恰好出现两次。对于每个 2 到 n 之间的整数 i &#xff0c;两个 i 之间出现的距离恰好为 i 。 序列里面两个数 a[…

static函数

// 以下摘自网络 静态函数在函数的返回类型前加上关键字static&#xff0c;函数就被定义成为静态函数。函数的定义和声明默认情况下是extern的&#xff0c;但静态函数只是在声明他的文件当中可见&#xff0c;不能被其他文件所用。定义静态函数的好处&#xff1a;<1> 其他…

操作系统是计算机的什么管理者,操作系统是计算机资源的管理者

由计算机提供的、因应用程序的存在和运行所消耗或占用的物质条件&#xff0c;叫做计算机的资 源&#xff0c;例如处理器的时间、内存空间、外部设各等。为了有效地利用计算机的各种资源&#xff0c;操作系统 必须为用户承担起对计算机资源的管理任务。例如&#xff0c;为了使应…

python文件流读取二进制_Python使用web.py从POST请求中提取二进制文件

I am developing an API that allows outside clients to send a binary file which will be processed. my web.data() is a string and the function I am calling requires a binary. How do I get it into the correct format? Maybe I have the incorrect Headers? how …

LeetCode 1828. 统计一个圆中点的数目

文章目录1. 题目2. 解题1. 题目 给你一个数组 points &#xff0c;其中 points[i] [xi, yi] &#xff0c;表示第 i 个点在二维平面上的坐标。多个点可能会有 相同 的坐标。 同时给你一个数组 queries &#xff0c;其中 queries[j] [xj, yj, rj] &#xff0c;表示一个圆心在…

LeetCode 1829. 每个查询的最大异或值(前缀异或 + 位运算)

文章目录1. 题目2. 解题1. 题目 给你一个 有序 数组 nums &#xff0c;它由 n 个非负整数组成&#xff0c;同时给你一个整数 maximumBit 。你需要执行以下查询 n 次&#xff1a; 找到一个非负整数 k < 2^maximumBit &#xff0c;使得 nums[0] XOR nums[1] XOR ... XOR num…