★实验任务

可怜的 Bibi 丢了好几台手机以后,看谁都像是小偷,他已经在小本本上记 下了他认为的各个地点的小偷数量。
现在我们将 Bibi 的家附近的地形抽象成一棵有根树。每个地点都是树上的 一个节点,节点上都标注了 Bibi 心中该地点的小偷数量。现在 Bibi 告诉你一个 节点 k,请你求出以该节点为根的子树中小偷数量的总和,以及子树中小偷最多 的节点的小偷数量。

★数据输入

输入第一行为一个正整数 n(1≤n≤100000)表示树的节点数目,树根的编号 总是为 1,且没有小偷。
接下来 n-1 行,每行两个正整数 p,x(1≤x≤100)。代表编号为 i 的节点的父 亲节点 p 和该节点的小偷数量 x。数据保证输入的 p 小于当前的 i。这里的 i 从 2 依次数到 n。
第 n+1 行一个整数 m(1≤m≤n), 表示询问组数。
第 n+2 行有 m 个整数,每个整数 ki(1≤ki≤n)代表该组询问中的节点 k。

★数据输出

输出 m 行,每行两个整数,代表以询问节点为根的子树中小偷数量的总和, 以及子树中小偷最多的节点的小偷数量。

输入示例 输出示例
3
1 56
1 82
1
1
138 82

思路

建立结构体

struct Tree
{int value;           //储存小偷数量int father;          //储存父节点int max;             //储存以这个节点为根的子节点小偷最大值int sum;             //以该节点为根的子树中小偷数量的总和
};

从最后一个节点开始,把它的value值加到它的父节点sum值上,并和父节点的max值比较,更新这个max值。

以询问节点为根的子树:两颗子树都要以这个节点为根节点

这就意味着:在我们统计max和sum的时候也要把被查询的节点的数据算进去。

Code

 #include<stdio.h>
#include<iostream>
using namespace std;
struct Tree
{int value;int father;int max;int sum;
};
int _max(int x,int y)
{if(x>y)return x;else return y;
}
Tree tree[100001]={0};
int main()
{int i;int max=0;int x;int y;int n;int m;int temp;scanf("%d",&n);for(i=2;i<=n;i++){scanf("%d %d",&x,&y);tree[i].father=x;tree[i].value=y;}for(i=n;i>=1;i--){tree[i].sum+=tree[i].value;                   //把自身的value加到sum中,作为最后的sumtree[i].max=_max(tree[i].max,tree[i].value);  //用自身的value和子树所提供的value最大值进行比较,得到最后的maxtree[tree[i].father].sum=tree[tree[i].father].sum+tree[i].sum;temp=_max(tree[i].value,tree[i].max);if(temp>tree[tree[i].father].max)tree[tree[i].father].max=temp;}scanf("%d",&m);for(i=1;i<=m;i++){scanf("%d",&x);printf("%d %d",tree[x].sum,tree[x].max);if(i<n)printf("\n");}return 0;
}

转载于:https://www.cnblogs.com/031602523liu/p/7816222.html

算法与数据结构实验题 6.4 Summary相关推荐

  1. 算法与数据结构实验题 10.23 寡人的难题

    算法与数据结构实验题 10.23 寡人的难题 ★实验任务 寡人心系天下为国为民,想要在历史中留下点痕迹,就必须要让国家强盛起来,正所谓想致富先修路,寡人觉得去修路,那些吃干饭的大臣给了寡人很多条要修的 ...

  2. 算法与数据结构实验题 10.16 被Gank的亚索

    算法与数据结构实验题 10.16 被Gank的亚索 ★实验任务 "哈撒给~",亚索一个Q打中了残血的维克多并挂上了点燃,正当亚索准备单杀维克多时,突然一声大喝!从两边草丛中窜出了两 ...

  3. 算法与数据结构实验题 10.23 寡人的难题——Kurskal算法

    ★实验任务 寡人心系天下为国为民,想要在历史中留下点痕迹,就必须要让国家强盛起来,正所谓想致富先修路,寡人觉得去修路,那些吃干饭的大臣给了寡人很多条要修的道路,奈何国库空虚,寡人只能选择其中一些道路, ...

  4. 算法与数据结构实验题 5.18 小孩的游戏

    ★实验任务 一群小孩子在玩游戏,游戏规则是这样子,给了一些卡片,上面有数字,现在要把卡片按照某一种序列排好,让这些数字重新链接组合成一个大数,求最大的数是什么. ★数据输入 第一行一个整数N 接下来N ...

  5. 算法与数据结构实验题 4.17 Maze

    ★实验任务 有一只小仓鼠身处在一个 N*M 迷宫之中,它现在想知道它最快能什么时候到达出口. 迷宫是由 ' . ' ' # ' 构成,' . '表示可以通行,'#'表示墙壁,不能通行,现在小仓鼠在'S ...

  6. 算法与数据结构实验题 7.4 玩游戏的亚索 (最小支撑树)

    1.题目: 2.代码: #include<cstdio> #include<iostream> #include<algorithm> using namespac ...

  7. 算法与数据结构实验题 8.21 森林冰火人

    本题的关键在于:每有一个雪人融化成为"0"的体积,就把它移到整个数组的最前面去.这样可以减少用时.第一次交的时候卡在这个上面了,time limit exceeded! #incl ...

  8. 三元组顺序表表示的稀疏矩阵加法_数据结构实验题(三元组顺序表表示的稀疏矩阵转置运算)...

    题目描述: 思路: 先用三元顺序表存放稀疏矩阵 typedef struct{ int row, col; int elem;} Elem;typedef struct{ int Row, Col, ...

  9. 算法与数据结构1800题 之 栈和队列

    b,c 栈已经存在 栈ADT initStack(&S):初始化一个空栈 StackEmpty(S):判断栈是否为空 Push(&S,x):进栈 Pop(&S,&x): ...

最新文章

  1. Hive-1.2.0学习笔记(一)安装配置
  2. IE和Firefox在JS方面的不兼容及统一方法总结
  3. CommonDialog控件
  4. azure上传代码_深入了解Azure Data Studio:更多代码和更少GUI
  5. C++-加载EXCEL数据
  6. Oracle 学习之RMAN(四)增量备份
  7. phpyun怎么采集_phpyun采集
  8. python网络爬虫入门(三)—— 做个简陋的pixabay 图片下载器
  9. oracle查询倒叙,ORACLE 索引结构--倒叙索引:
  10. 微信小程序生成二维码工具类附带完整示例和源码
  11. Celery介绍——手机短信异步发送
  12. Java 基础核心总结
  13. 根据身份证解析出生年月
  14. C语言学习第一天~Eclipse MinGW环境搭建
  15. linux查看以i开头的文件,Linux文件查找Day.13
  16. 区块链到底能干什么?
  17. 数据库查询_同时选修了两门课的学生姓名、学号
  18. opengl 下载安装+vs2010配置
  19. 黄向阳:从穷游网CTO到企趣CEO
  20. Vector NTI 11.5.3| Win版 | 生物专业软件 | 安装教程

热门文章

  1. 提示word损坏,需文本恢复转换器的解决两方法
  2. 知道标签html中的标签,我的取包括标签的标签内的内容使用的正则表达式()
  3. skyline point解析
  4. NPL之如何使用Glove--词向量转化
  5. leetcode —— 面试题62. 圆圈中最后剩下的数字
  6. 关于maven导入工程pom文件报错问题及解决
  7. 透视变换--基于getPerspectiveTransform()及像素赋值(未涉及插值)
  8. ubuntu 16.04安装opencv 2.4.9及其关于qt的问题
  9. 最优二叉查找树(动态规划)——详解
  10. 概率论和数理统计 - 03 - 多维随机变量及其分布