#include <iostream> #include <algorithm> using namespace std; ; int n, m; int h[N], size; void down(int u) { int t = u; //u这个点的做儿子是u*2,右儿子是u*2+1 完全二叉树 <= size && h[u * ] < h[t]) t = u * ; //如果左儿子存在,而左儿子比u小 + <= size &&…
地址 https://www.acwing.com/problem/content/838/ 一共有n个数,编号是1~n,最开始每个数各自在一个集合中. 现在要进行m个操作,操作共有两种: “M a b”,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作: “Q a b”,询问编号为a和b的两个数是否在同一个集合中: 输入格式 第一行输入整数n和m. 接下来m行,每行包含一个操作指令,指令为“M a b”或“Q a b”中的一种. 输出格式 对于每个询问指令”…
堆(heap),是一种特殊的数据结构.之所以特殊,因为堆的形象化是一个棵完全二叉树,并且满足任意节点始终不大于(或者不小于)左右子节点(有别于二叉搜索树Binary Search Tree).其中,前者称为小顶堆(最小堆,堆顶为最小值),后者为大顶堆(最大堆,堆顶为最大值).然而更加特殊的是,通常使用数组去存储堆,而不是二叉树.关于完全二叉树,可以参见另一篇博文http://www.cnblogs.com/eudiwffe/p/6207196.html // Heap is a sepcial…
[Unity][Heap sort]用Unity动态演示堆排序的过程 How Heap Sort Works 最近做了一个用Unity3D动态演示堆排序过程的程序. I've made this app to show how heap sort works recently. 效果图(Demo) 一图抵千言. A picture paints a thousand words. 堆排序(Heap Sort) 堆排序总是建立这样一个二叉树:其父结点总大于其子结点. Step 1: The fir…