PTA L2-4 关于堆的判断
先上题面
链接 https://pintia.cn/problem-sets/994805046380707840/problems/994805064676261888
首先,题目描述的很清楚,这是一个关于最小堆的问题。题目的意思就是根据插入顺序建一个最小堆,然后对给出的命令进行判断,输出T or F。
因为堆其实就是一种特殊的二叉树,它具有两个性质: 1.结构性:用数组表示的完全二叉树。
2. 有序性:任一结点的关键字是其子树所有结点的最大值(最大堆)或最小值(最小堆)。
按照上述,我们应该很容易想到用数组存储这个堆,因为这样方便的进行元素的插入以及交换。
接下来就是进行建堆操作
其操作如下:
1.先将要插入的元素放在数组的末尾。
2.进行上浮交换操作,如果它小于它的父节点(在数组中表示为 i/2 ),则就进行交换。
3.不断插入元素,重复执行1,2操作。
完成建堆操作后,因为接下来进行的查询操作给出的是值,而我们则要根据下标来判断他们之间的关系。
所以要建立一个map映射关系,同时,因为查询中有父子结点的关系的判断,因此可以开个数组存储父子节点关系。
最后,就是执行查询操作了,输入的查询语句有一定规律,这个将在下面的代码中展示。
tips:因为输入的值存在负值,所以可以令num[0] = -1001,令num[1] - num[N]存值,这样才能保证建堆正确。
#include <cstdio>
#include <vector>
#include <map>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int H[],fa[],depth[];
map<int,int>mp;
void dui(int val,int site)
{
for(;val<H[site/]&&site>;site/=)
{
swap(H[site],H[site/]);
} return ;
}
int main()
{
int n,m;
scanf("%d %d",&n,&m);
scanf("%d",&H[]);
H[] = -;
for(int i = ;i<=n;i++)
{
scanf("%d",&H[i]);
dui(H[i],i);
}
for(int i = ;i<=n;++i)
mp[H[i]] = i;
fa[] = ;
for(int i = ;i<=n;i++)
{
fa[i] = H[i/]; }
int a,b;
string s;
while(m--)
{
bool flag;
scanf("%d",&a);
cin >> s;
if(s=="is")
{
cin >>s>>s;
if(s=="root")
{
if(H[]==a)
flag = true;
else
flag = false;
}
else if(s=="child")
{
cin >> s;
scanf("%d",&b);
// printf("a==%d b==%d\n",a,b);
if(fa[mp[a]]==b)
flag = true;
else
flag = false;
}
else
{
cin >> s;
scanf("%d",&b);
if(fa[mp[b]]==a)
flag = true;
else
flag = false; }
}
else
{
scanf("%d",&b);
cin >>s >>s;
if(fa[mp[a]]==fa[mp[b]])
flag = true;
else
flag = false;
}
if(flag)
printf("T\n");
else
printf("F\n");
} return ;
}
如果有所帮助,不胜荣幸。
PTA L2-4 关于堆的判断的更多相关文章
- codevs 2879 堆的判断
codevs 2879 堆的判断 http://codevs.cn/problem/2879/ 题目描述 Description 堆是一种常用的数据结构.二叉堆是一个特殊的二叉树,他的父亲节点比两个儿 ...
- ->code vs 2879 堆的判断(堆的学习一)
2879 堆的判断 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 堆是一种常用的数据结构.二叉堆是一个特殊的二叉树,他的父 ...
- 堆的判断(codevs 2879)
2879 堆的判断 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 堆是一种常用的数据结构.二叉堆 ...
- L2-012. 关于堆的判断
L2-012. 关于堆的判断 题目链接:https://www.patest.cn/contests/gplt/L2-012 终于ac了,简直要哭.题目还是很简单的,不过很多坑: 1.寻找x下标时,有 ...
- pat 团体天梯赛 L2-012. 关于堆的判断
L2-012. 关于堆的判断 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的小顶堆H[] ...
- L2-012. 关于堆的判断(STL中heap)
L2-012. 关于堆的判断 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: “x is the root”:x是根结点: “x and y ...
- 【小顶堆的插入构造/遍历】PatL2-012. 关于堆的判断
L2-012. 关于堆的判断 时间限制 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: “x is the root”:x是根结点: “x a ...
- 【数组模拟-小顶堆的插入构造/遍历】PAT-L2-012.-关于堆的判断--数组模拟
L2-012. 关于堆的判断 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: “x is the root”:x是根结点: “x and y ar ...
- (PAT)L2-012 关于堆的判断 (最小堆)
题目链接:https://www.patest.cn/contests/gplt/L2-012 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: “ ...
随机推荐
- windows硬盘优化篇
1.数据收集(默认的族分配为4096 bytes.最好只使用第一次的计算结果,以后再运算值会一直增加.计算软件“Cluster Size Calculator”) ------------系统为w7 ...
- git 工作区管理
git工作区 git的工作区就是电脑中能看到的目录,比如我的learning文件夹就是一个工作区 版本库暂存区 工作去有一个隐藏的目录.git,这个不算工作区,而是git的版本库 git的版本库中存了 ...
- python输入整数
#!/usr/bin/env python#ecoding=utf-8'''Created on 2017年11月2日 @author: James zhan''' def fun(n): if n= ...
- php中excel以及cvs等导入以及导出
一般网站后台都有人员导入或者是订单导出之类的操作,今天分享一下几种php excel cvs等文件导入导出的办法. 第一种比较简单的,自己写的,不引用任何excel类.但是会有bug,代码如下: 首先 ...
- webAR涉及的技术
1.技术体系 1.1技术体系整理 其中绿色底色的代表Demo中表现出的能力比较成熟,可以直接应用. 脑图地址:http://naotu.baidu.com/file/3392a895a9039 ...
- 【持续更新】JAVA面向对象多线程编程的一些tips
sleep()和wait()的区别 sleep()方法是Thread类的方法,wait()方法是Object类的方法. 调用sleep()方法的过程中,线程不会释放对象锁,睡眠时间一过,就又开始执行. ...
- c#连接db2数据库
.net项目要连接db2数据库,是要安装客户端的,否则是连接不上的: 若出现“未在本地计算机上注册‘ibmdadb2’提供程序” 解决办法: 1.先找到安装后的ibmdadb2.dll文件复制到c:\ ...
- [Leetcode 216]求给定和的数集合 Combination Sum III
[题目] Find all possible combinations of k numbers that add up to a number n, given that only numbers ...
- C语言采用socket实现http post方式上传json数据
1.按照HTTP协议发送请求: http POST 报文格式 http 报文是面向文本的. 报文分为:请求报文和响应报文 请求报文由:请求行,请求头部,空行和请求数据四个部分组成. <1.请求行 ...
- DevExpress之TreeList控件用作导航使用说明
最近项目用的是DEV界面框架, 由于各控件属性太多,以免遗忘.所以做个笔录.也方便有这方面需求的网友交流学习.下面开始讲解具体实现步骤. 一.先布局,设置相关属性. 1.首先到工具箱拖一个 TreeL ...