【BZOJ1078】[SCOI2008]斜堆(性质题)
【BZOJ1078】[SCOI2008]斜堆(性质题)
题面
题解
考虑一下这道题目的性质吧。思考一下最后插入进来的数是什么样子的。首先因为它是最后插入进来的,所以一定是比某个数小,然后把这个数作为一个根,原来的树根直接接到了左儿子上面,因此它没有右儿子。然而显然可以同时有多个儿子没有右子树。再想想,显然的,每次都是交换路径上的左右儿子,然后插入到左儿子中,所以显然最后插入的这个点是一路插进左儿子的。所以每次找到最靠左的、并且没有右儿子的位置,然后再判断一下它的左儿子是否只有一个点,否则优先选左儿子(保证字典序更小)。
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
#define MAX 55
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int n,ch[MAX][2],fa[MAX];
int nw,ans[MAX],rt;
void work()
{
nw=rt;
while(ch[nw][1])nw=ch[nw][0];
int v=ch[nw][0];
if(v&&!ch[v][0]&&!ch[v][1])nw=v;
}
int main()
{
n=read();fa[rt=0]=-1;
for(int i=1;i<=n;++i)
{
int x=read();
if(x<100)ch[x][0]=i,fa[i]=x;
else ch[x-100][1]=i,fa[i]=x-100;
}
for(int i=n;i>=0;--i)
{
nw=-1;work();ans[i]=nw;
if(nw==rt)rt=ch[nw][0];int ff=fa[nw];
if(~ff)
{
ch[ff][0]=ch[nw][0];
if(ch[nw][0])fa[ch[nw][0]]=ff;
}
while(~fa[nw])swap(ch[fa[nw]][0],ch[fa[nw]][1]),nw=fa[nw];
}
for(int i=0;i<=n;++i)printf("%d ",ans[i]);
puts("");return 0;
}
【BZOJ1078】[SCOI2008]斜堆(性质题)的更多相关文章
- BZOJ1078 [SCOI2008]斜堆 堆
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1078 题意概括 斜堆(skew heap)是一种常用的数据结构.它也是二叉树,且满足与二叉堆相同的 ...
- [bzoj1078][SCOI2008][斜堆] (贪心)
Description 斜堆(skew heap)是一种常用的数据结构.它也是二叉树,且满足与二叉堆相同的堆性质:每个非根结点的值都比它父亲大.因此在整棵斜堆中,根的值最小.但斜堆不必是平衡的,每个结 ...
- BZOJ1078: [SCOI2008]斜堆
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1078 每一次进入的点一定是一个极左节点,然后将它所处在的整棵树左右翻转.加上一些情况的处理. ...
- 【bzoj1078】[SCOI2008]斜堆
2016-05-31 16:34:09 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1078 挖掘斜堆的性质233 http://www.cp ...
- 【BZOJ 1078】 1078: [SCOI2008]斜堆
1078: [SCOI2008]斜堆 Description 斜堆(skew heap)是一种常用的数据结构.它也是二叉树,且满足与二叉堆相同的堆性质:每个非根结点的值都比它父亲大.因此在整棵斜堆中, ...
- BZOJ 1078: [SCOI2008]斜堆
1078: [SCOI2008]斜堆 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 770 Solved: 422[Submit][Status][ ...
- 【bzoj1078】 SCOI2008—斜堆
http://www.lydsy.com/JudgeOnline/problem.php?id=1078 (题目链接) 题意 给出一个斜堆,并给出其插入的操作,求一个字典序最小的插入顺序. Solut ...
- [SCOI2008]斜堆
题目大意 1.题目描述 斜堆(skew heap)是一种常用的数据结构. 它也是二叉树,且满足与二叉堆相同的堆性质: 每个非根结点的值都比它父亲大.因此在整棵斜堆中,根的值最小. . 但斜堆不必是平衡 ...
- P2475 [SCOI2008]斜堆(递归模拟)
思路 可并堆真是一种神奇的东西 不得不说这道题是道好题,虽然并不需要可并堆,但是能加深对可并堆的理解 首先考虑斜堆的性质,斜堆和左偏树相似,有如下的性质 一个节点如果有右子树,就一定有左子树 最后插入 ...
随机推荐
- 对寄存器ESP和EBP的一些理解
PS:EBP是当前函数的存取指针.即存储或者读取数时的指针基地址:ESP就是当前函数的栈顶指针. 每一次发生函数的调用(主函数调用子函数)时,在被调用函数初始时,都会把当前函数(主函数)的EBP压栈, ...
- SonarQube-Centos环境设置为系统服务
1.准备工作 官方文档:https://docs.sonarqube.org/latest/setup/operate-server/ 2.配置 /sonar.sh /usr/bin/sonar cd ...
- 【stylus】stylus在webstrom中的识别
<style lang="stylus" rel="stylesheet/stylus"> @import './common/stylus/mix ...
- 20155210 Exp8 WEB基础实践
Exp8 WEB基础实践 Apache环境配置 apache是kali下的web服务器,通过访问ip地址+端口号+文件名称可以打开对应的网页. 输入命令vi /etc/apache2/ports.co ...
- 20155325 Exp9 Web安全基础
本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验后回答问题 (1)SQL注入攻击原理,如何防御 原理:SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击 ...
- LoRa---数据包结构、跳频
数据包结构 跳频扩频技术FHSS 人太懒,直接贴图,自己看!
- vuex实践之路——笔记本应用(二)
上一篇我们简单介绍了vuex在此项目中的作用. 这次来理一下项目的整体思路. main.js上次看过了,首先看App.vue文件 我们引入了Toolbar.vue,NodeList.vue,Edito ...
- sudo apt-get update 去除设置的代理
今天想装个软件(wine),使用 sudo apt-get update 命令时,发现给出很多Ign 语句,总出现 Connecting to proxy.http://10.0.126.1:1312 ...
- Docker_容器化jenkins
Docker部署接口自动化持续集成环境第二步,容器化一个Jenkins! 接上文:Docker_容器化gitlab 1:pull一个jenkins镜像 docker pull jenkins 2:查看 ...
- CodeFirst从零搭建ASP.NETCore2.0
没时间介绍了,废话不说先上车 以下所有扯淡都是建立在.NETCore2.0环境已经搭建好 右键解决方案>新建项目> 选择Web>ASP.NETCoreWeb应用程序(.NET Cor ...