数据结构 堆中的路径(最小堆)
题目:
将一系列给定数字插入一个初始为空的小顶堆H[ ]。随后对任意给定的下标i,打印从H[i]到根结点的路径。
输入格式:
每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。
输出格式:
对输入中给出的每个下标i,在一行中输出从H[i]到根结点的路径上的数据。数字间以1个空格分隔,行末不得有多余空格。
输入样例:
5 3
46 23 26 24 10
5 4 3
输出样例:
24 23 10
46 23 10
26 10
思路:
利用最小堆建堆的方法,具体方法见我的另一篇博客,有详细的讲解哦~
数据结构 最大堆和最小堆知识点整理
本题的建堆模型是一个个地插入,在每次插入的过程中进行向上调整,最后输出路径即可。
注意:本题不要选用错误的建堆模型,不要一次性全部读取到数组里再生产最小堆,这样的结果与本题的结果不相同(因为本身最小堆的序列是不唯一的,不同的方法得到的序列可能是不相同的~)
代码:
#include<bits/stdc++.h>
using namespace std;
int n, m, h[1005];
void siftup(int v)
{while(v > 1 && h[v] < h[v/2]){swap(h[v], h[v/2]);v = v / 2;}
}int main()
{scanf("%d %d", &n, &m);int node;for(int i = 1; i <= n; i++){scanf("%d", &h[i]);siftup(i);}for(int i = 0; i < m; i++){scanf("%d", &node);bool flag = false;while(node > 0){if(flag == false){printf("%d", h[node]);flag = true;}else printf(" %d", h[node]);node = node / 2;}printf("\n");}return 0;
}
数据结构 堆中的路径(最小堆)相关推荐
- 【数据结构笔记18】堆中的路径与C实现(堆元素到根的路)径)
本次笔记内容: 小白专场:堆中的路径 文章目录 题意理解 堆的表示及其操作 主程序 题意理解 将一系列给定数字插入一个初始为空的小顶堆H[].随后对任意给定的下标'i',打印从H[i]到根结点的路径. ...
- Leetcode295 数据流中的中位数-最小堆和最大堆
题目 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如,[2,3,4] 的中位数是 3:[2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一个支持以下两 ...
- 堆中的路径 (25 分)
7-17 堆中的路径 (25 分) 将一系列给定数字插入一个初始为空的小顶堆H[].随后对任意给定的下标i,打印从H[i]到根结点的路径. 输入格式: 每组测试第1行包含2个正整数N和M(≤1000) ...
- 7-3 堆中的路径 (25 分)
7-3 堆中的路径 (25 分) 将一系列给定数字插入一个初始为空的小顶堆H[].随后对任意给定的下标i,打印从H[i]到根结点的路径. 输入格式: 每组测试第1行包含2个正整数N和M(≤1000), ...
- python实现二叉堆中的大顶堆(大根堆)
堆(英语:heap)是计算机科学中一类特殊的数据结构的统称.堆通常是一个可以被看做一棵树的数组对象.堆总是满足下列性质: 堆中某个节点的值总是不大于或不小于其父节点的值: 堆总是一棵完全二叉树. 将根 ...
- 最大堆和最小堆和平衡二叉树_最小堆二叉树
最大堆和最小堆和平衡二叉树 A Min Heap Binary Tree is a Binary Tree where the root node has the minimum key in the ...
- 数据结构5-4:白白专场——堆中的路径——C语言实现
堆是按照一定顺序组织的完全二叉树,所以堆的表示一种最直接了当也是很完美的一种表示就是用数组来表示. #define MAXN 1001 #define MINH -10001int H[MAXN], ...
- 05-树7 堆中的路径 (25 分)
将一系列给定数字插入一个初始为空的小顶堆H[].随后对任意给定的下标i,打印从H[i]到根结点的路径. 输入格式: 每组测试第1行包含2个正整数N和M(≤),分别是插入元素的个数.以及需要打印的路径条 ...
- java 堆中的新生代_Java堆内存_Young Gener_Old Generation_新生代和老年代
使用JDK8 Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象. 在 Java 中,堆被划分成两个不同的区域:新生代 ( Young ).老年代 ( Old ).新 ...
最新文章
- DIP第二章习题解答
- Python入门100题 | 第052题
- keras从入门到放弃(二十二)一维卷积处理 RNN文本分类
- 【线上分享】视频质量评价:挑战与机遇
- 个推微服务网关架构实践
- 程序员求职面试三部曲之一:选择合适的工作单位
- 如何快速搭建自己的独立站?
- 6.解决循环依赖的问题
- 转载]施一公:如何提高英文的科研写作能力
- Web前端——HTML表单及表格
- Excel/Word 插入图表 InvokeMember设置图表类型
- CAD中一个图形的多种画法
- Java+Swing+mysql用户信息管理系统
- 企查查企业详情爬虫(自动模拟登录企业详情页法律风险爬取)
- C语言停车场管理系统
- LInux:进程等待之wait() waitpid()
- Task3:第三回:布局格式定方圆
- J-flash工具使用教程
- 事业单位招聘java_新华社新媒体中心2018年面向社会招聘事业单位人员
- 领英发布2019年职场十大趋势 新一线城市吸引力增强
热门文章
- Android之网络编程之网络通信几种方式实例分享
- 【看动漫学编程】程序员在异世界生个娃 第1篇:太极村
- php如何避免时间重复,如何避免/停止php和html的重复插入?
- java list 初始化_Java新特性:数据类型可以扔掉了?
- 只要一点点力气就可以撬起重物?
- 它是世界上最轻的固体!1000℃下不会熔化,上过火星,还能进你家......
- “财务自由的15个阶段!说说你到哪个阶段了?”
- 为什么盯一个字看久了,反而感觉不认识了?
- 想象中的同居生活 VS 真实的同居生活
- 21岁就破解困扰人们300年难题的天才,却一生坎坷,怀才不遇,至死还得不到认可...