树的节点值之和

题目背景

墨家家主有棵树。
题目描述

给定一个保存树节点信息的数据结构,它包含了树节点唯一的 id ,树节点值 和 直系子节点的 id 。

比如,树节点1是树节点2的父节点,树节点2是树节点3的父节点。他们相应的树节点值为 9 , 4 , 1 。那么树节点1的数据结构是 [1, 9, [2]] ,树节点2的数据结构是 [2, 4, [3]] ,树节点3的数据结构是 [3, 1, []] 。注意虽然树节点3也是树节点1的一个子节点,但是由于并不是直系子节点,因此没有体现在树节点1的数据结构中。

现在输入一棵树的所有树节点信息,以及单个树节点id,返回这个树节点和它所有子节点的节点值之和。
输入格式

第一行输入一个整数N,代表共有N个树节点。

接下来输入N个树节点,每个树节点第一行输入它的id,第二行输入节点的值,第三行输入直系子节点的个数M,第四行输入M个直系子节点的id值。

最后一行输入一个树节点id。
输出格式

一个整数,最后一行输入的树节点的和它所有子节点的节点值之和。
输入输出样例
输入

3
1
5
2
2 3
2
3
0
3
3
0
1

输出

11

说明/提示

树节点 1 自身的节点值是 5 ,他有两个直系子节点 2 和 3 ,而且 2 和 3 的节点值均为 3 。因此树节点 1 的总节点值是 5 + 3 + 3 = 11 。

一个树节点最多有一个直系父节点,但是可以有多个直系子节点。

节点数量不超过 2000 。

解题思路:
正常模拟一棵树!!!但是用vector容器,在规模较大的时候,效率比数组慢很多,观察下面的数据点可以知道,最后两个数据点,用vector容器的写法是过不了的。

代码如下:

#include <iostream>
#include <vector>
using namespace std;
const int N = 1010;
vector<int>tnode[N];
int w[N];
int ans;
void dfs(int node)
{ans+=w[node];for (int i = 0;i<tnode[node].size();i++){dfs(tnode[node][i]);}
}int main()
{int cnt;cin>>cnt;while(cnt--){int id,chiln;cin>>id;cin>>w[id];cin>>chiln;if (chiln==0) continue;else{for (int i = 1;i<=chiln;i++){int chilid;cin>>chilid;tnode[id].push_back(chilid);}}}int root;cin>>root;dfs(root);cout<<ans<<endl;return 0;
}

在这里插入图片描述

代码如下:

#include <iostream>
using namespace std;
const int N = 2010;
int ans;struct node {int w;int ch[N];int size;
};node tnode [N];void dfs(int root) {ans += tnode[root].w;for (int i = 1; i <= tnode[root].size; i++) {dfs(tnode[root].ch[i]);}
}int main() {int cnt;cin >> cnt;while (cnt--) {int id, n;cin >> id;cin >> tnode[id].w;cin >> n;if (n == 0)continue;else {for (int i =  1; i <= n; i++) {cin >> tnode[id].ch[i];}tnode[id].size = n;}}int root;cin >> root;dfs(root);cout << ans << endl;return 0;
}

在这里插入图片描述

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

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

相关文章

.NET Core开发实战(第21课:中间件:掌控请求处理过程的关键)--学习笔记(上)...

21 | 中间件&#xff1a;掌控请求处理过程的关键这一节讲解一下如何通过中间件来管理请求处理过程中间件工作原理next 表示后面有一个委托&#xff0c;每一层每一层套下去可以在任意的中间件来决定在后面的中间件之前执行什么&#xff0c;或者说在所有中间件执行完之后执行什么…

angularjsl路由_AngularJs ng-route路由详解

本篇基于ng-route来讲下angular中的路由&#xff0c;路由功能主要是 $routeProvider服务 与 ng-view 实现。ng-view的实现原理&#xff0c;是根据路由的切换&#xff0c;动态编译html模板——$compile(html)(scope)。前提首先需要在页面引入angular和angular-route&#xff0c;…

pandas中Series的map函数详解

Series的map函数 Series的map方法可以接受一个函数或含有映射关系的字典型对象。使用map是一种实现元素级转换以及其他数据清理工作的便捷方式。DataFrame中对应的是applymap()函数&#xff0c;当然DataFrame还有apply()函数 1.字典映射 例如&#xff0c;对数据的某个字段进…

简单的二叉树创建与遍历

编一个程序&#xff0c;读入用户输入的一串先序遍历字符串&#xff0c;根据此字符串建立一个二叉树&#xff08;以指针方式存储&#xff09;。 例如如下的先序遍历字符串&#xff1a; ABC##DE#G##F### 其中“#”表示的是空格&#xff0c;空格字符代表空树。建立起此二叉树以后&…

tof摄像头手势识别_一种基于TOF手势识别的控制系统的制作方法

本发明属于汽车零配件技术领域&#xff0c;尤其是一种基于TOF手势识别的控制系统。背景技术&#xff1a;随着触摸屏技术的不断推广&#xff0c;用户已经适应并逐渐熟悉了与机器的互动。现在&#xff0c;人机互动技术已迈上了更高的台阶&#xff0c;进入了手势识别时代。随着手势…

疫情期间,千万级系统宕机N次,老板撂下狠话:没法把性提升10倍,全员解雇!...

性能调优整体思路作为一名团队技术核心&#xff0c;如何让系统跑得通、跑得稳、跑得快是必然会面对的场景。性能分析是一个大课题&#xff0c;不同的架构、不同的应用场景、不同的程序语言分析的方法若有差异&#xff0c;抽象一下大致分为两类&#xff1a;自底向上&#xff1a;…

Pandas - 查看DataFrame信息

数据表信息查看 1、维度查看&#xff1a; df.shape2、数据表基本信息&#xff08;维度、列名称、数据格式、所占空间等&#xff09;&#xff1a; df.info()3、每一列数据的格式&#xff1a; df.dtypes4、某一列格式&#xff1a; df[B].dtype5、空值&#xff1a; df.isnul…

hdu2602 Bone Collector-01背包问题

Problem Description Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as dog’s , cow’s , also he went to the grave … The bone collector had a big bag with a volume of…

对比Java和.NET多线程编程

这篇文章以对比的方式总结Java和.NET多线程编程。基本概念多线程&#xff1a;很多开发语言都提供多线程编程支持&#xff0c;比如Java&#xff0c;C#。并发&#xff08;concurrent&#xff09;&#xff1a;即使对于单核CPU&#xff0c;我们也会采用多线程等技术提高service的并…

Anaconda创建python虚拟环境

在创建虚拟环境之前首先我们需要打开命令终端&#xff1a;Win R 输入cmd 或者直接打开Anaconda Prompt&#xff08;Anaconda&#xff09; pycharm下载历史版本地址&#xff1a;https://www.jetbrains.com/pycharm/download/other.html Anaconda下载历史版本地址&#xff1a;ht…

vue2实践揭秘pdf_《Vue2.0 实践揭秘》终于出版啦!

不知不觉间在园子开博都两年多了&#xff0c;最近一些园友问最近去哪了为何都没有新的文章了。最近确实发生了很多的事&#xff0c;一是忙工作二就是忙着写书。这还得多些园子的小编&#xff0c;自两年前发表的“架构师修炼”系列的文章后被出版社相出让我将这个主题写成书&…

[蓝桥杯][算法提高VIP]夺宝奇兵-递推+记忆化搜索

题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 ”夺宝奇兵”从山下出发,到达山顶,如何选路才能得到最多的珠宝呢?在上图所示例子中,按照5-> 7-> 8-&g…

这些年我对微服务的理解

Monolith、SOA、DDD、The two-pizza rule、分库分表这些概念跟微服务有啥关系&#xff0c;你知道吗&#xff1f;这篇文章记录我的理解&#xff0c;分享给大家。微服务&#xff08;micro service&#xff09;&#xff0c;个人感觉也就近几年才吵起来的概念&#xff0c;记得退回去…

梯度下降与线性回归

对于代价函数&#xff1a; loss∑i(y^−yi)2loss\sum_i{(\hat{y}-y_i)}^2loss∑i​(y^​−yi​)2 loss∑i(w∗xib−yi)2loss\sum_i{(w*x_ib-y_i)}^2loss∑i​(w∗xi​b−yi​)2 最常见的代价函数&#xff1a;均方差代价函数&#xff08;Mean-Square Error&#xff0c;MSE&…

fastreport字体自适应_FastReport 自动换行与行高自适应及自动增加空行

设定后即可自动换行及行高自适应。版本号5.6.21、masterData&#xff1a;属性值&#xff1a;stretched 为True2、Memo设定wordwrap为True ,stretchMode:smMaxHeightFastReport自动增加空行1、在masterdata下增加child&#xff1b;2、在code编写如下代码varPageLine: integer;//…

.NET Core开发实战(第21课:中间件:掌控请求处理过程的关键)--学习笔记(下)...

21 | 中间件&#xff1a;掌控请求处理过程的关键如果在 Map 的时候逻辑复杂一点&#xff0c;不仅仅判断它的 URL 地址&#xff0c;而且要做特殊的判断的话&#xff0c;可以这么做把判断逻辑变成一个委托我们要判断当我们的请求地址包含 abc 的时候&#xff0c;输出 new abcapp.…

英伟达3060Ti安装GPU版本TensorFlow2.X和Pytorch

查看Python与TensorFlow对应版本 安装GPU版本的TensorFlow的时候&#xff0c;我们需要考虑的一个问题是Python版本与TensorFlow版本的对应关系&#xff0c;可以参考下面这个链接&#xff1a; Python对应TensorFlow CPU版本 GPU版本 查看显卡驱动对应的CUDA版本并且下载安装 …

石子合并-区间dp

设有N堆石子排成一排&#xff0c;其编号为1&#xff0c;2&#xff0c;3&#xff0c;…&#xff0c;N。 每堆石子有一定的质量&#xff0c;可以用一个整数来描述&#xff0c;现在要将这N堆石子合并成为一堆。 每次只能合并相邻的两堆&#xff0c;合并的代价为这两堆石子的质量…

cesium米转换经纬度_cesium 笛卡尔坐标(单位:米) 与 经纬度(单位:弧度/度) 之间的转换。...

this.model.readyPromise.then(function (tileset) {//记录模型原始的中心点var boundingSphere tileset.boundingSphere;that.boundingSphere boundingSphere;//模型原始的中心点。此处是笛卡尔坐标&#xff0c;单位&#xff1a;米。var position boundingSphere.center;//…

200行代码,7个对象——让你了解ASP.NET Core框架的本质[3.x版]

2019年1月19日&#xff0c;微软技术&#xff08;苏州&#xff09;俱乐部成立&#xff0c;我受邀在成立大会上作了一个名为《ASP.NET Core框架揭秘》的分享。在此次分享中&#xff0c;我按照ASP.NET Core自身的运行原理和设计思想创建了一个 “迷你版” 的ASP.NET Core框架&…