思路

可并堆真是一种神奇的东西

不得不说这道题是道好题,虽然并不需要可并堆,但是能加深对可并堆的理解

首先考虑斜堆的性质,斜堆和左偏树相似,有如下的性质

  • 一个节点如果有右子树,就一定有左子树
  • 最后插入的节点一定没有右子树

然后考虑倒序删除节点就可以做了

对一个节点,如果它没有右子树,它就可能是最后插入的点,但是显然还有其他情况

如果它的左子树中还有满足条件的点,则取深度最浅的节点即可,考虑小于等

于当前根的权值的情况时,取深度最深会有问题,可以自行画图

然后如果左子树中只有一个节点,那么两个节点都可以,为保证字典序最小,把权值较大的节点放在答案序列靠后的位置即可

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int lson[150],rson[150],fa[150],n,cnt,ans[150],root;
int getlast(int o){
int ans=o;
while(o!=-1){
if(rson[o]==-1){
ans=o;
break;
}
o=lson[o];
}
if(lson[o]!=-1&&lson[lson[o]]==-1)
ans=lson[o];
return ans;
}
void del(int o,int val){
while(fa[o]!=-1){
swap(lson[fa[o]],rson[fa[o]]);
o=fa[o];
}
}
int main(){
scanf("%d",&n);
cnt=n+1;
memset(ans,-1,sizeof(ans));
memset(lson,-1,sizeof(lson));
memset(rson,-1,sizeof(rson));
memset(fa,-1,sizeof(fa));
for(int i=1;i<=n;i++){
int x;
scanf("%d",&x);
if(x<100){
lson[x]=i;
fa[i]=x;
}
else{
rson[x-100]=i;
fa[i]=x-100;
}
}
fa[0]=-1;
root=0;
while(cnt--){
int x=getlast(root);
ans[cnt]=x;
lson[fa[x]]=lson[x];
if(lson[x]!=-1)
fa[lson[x]]=fa[x];
del(x,x);
fa[x]=-1;
if(x==root)
root=lson[x];
}
for(int i=0;i<=n;i++)
printf("%d ",ans[i]);
return 0;
}

P2475 [SCOI2008]斜堆(递归模拟)的更多相关文章

  1. P2475 [SCOI2008]斜堆

    题目背景 四川2008NOI省选 题目描述 斜堆(skew heap)是一种常用的数据结构.它也是二叉树,且满足与二叉堆相 同的堆性质:每个非根结点的值都比它父亲大.因此在整棵斜堆中,根的值最小. 但 ...

  2. BZOJ 1078: [SCOI2008]斜堆

    1078: [SCOI2008]斜堆 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 770  Solved: 422[Submit][Status][ ...

  3. 【bzoj1078】[SCOI2008]斜堆

    2016-05-31 16:34:09 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1078 挖掘斜堆的性质233 http://www.cp ...

  4. 【BZOJ 1078】 1078: [SCOI2008]斜堆

    1078: [SCOI2008]斜堆 Description 斜堆(skew heap)是一种常用的数据结构.它也是二叉树,且满足与二叉堆相同的堆性质:每个非根结点的值都比它父亲大.因此在整棵斜堆中, ...

  5. 【BZOJ1078】[SCOI2008]斜堆(性质题)

    [BZOJ1078][SCOI2008]斜堆(性质题) 题面 BZOJ 洛谷 题解 考虑一下这道题目的性质吧.思考一下最后插入进来的数是什么样子的.首先因为它是最后插入进来的,所以一定是比某个数小,然 ...

  6. [bzoj1078][SCOI2008][斜堆] (贪心)

    Description 斜堆(skew heap)是一种常用的数据结构.它也是二叉树,且满足与二叉堆相同的堆性质:每个非根结点的值都比它父亲大.因此在整棵斜堆中,根的值最小.但斜堆不必是平衡的,每个结 ...

  7. [SCOI2008]斜堆

    题目大意 1.题目描述 斜堆(skew heap)是一种常用的数据结构. 它也是二叉树,且满足与二叉堆相同的堆性质: 每个非根结点的值都比它父亲大.因此在整棵斜堆中,根的值最小. . 但斜堆不必是平衡 ...

  8. BZOJ1078 [SCOI2008]斜堆 堆

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1078 题意概括 斜堆(skew heap)是一种常用的数据结构.它也是二叉树,且满足与二叉堆相同的 ...

  9. 【bzoj1078】 SCOI2008—斜堆

    http://www.lydsy.com/JudgeOnline/problem.php?id=1078 (题目链接) 题意 给出一个斜堆,并给出其插入的操作,求一个字典序最小的插入顺序. Solut ...

随机推荐

  1. Day10 Python网络编程 Socket编程

    一.客户端/服务器架构 1.C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务)[QQ,SSH,MySQL,FTP] 2.C/S架构与socket的关系: 我们学习soc ...

  2. hdu4870 高斯消元

    题意 一个人打比赛 ,rating 有p的概率 为加50分 有1-p的概率为 x-100分 最大值为 1000 最小值为0 有两个号 每次拿较小的号来提交 , 计算最后到达 1000分得期望场数是多少 ...

  3. Python大神成长之路: 第二次学习记录

    数据类型          数据操作 bytes 类型 "".encode() 编码-->二进制 "".decode() 解码 判断字符串里的字符是否全为 ...

  4. [DeploymentService:290066]Error occurred while downloading files from admin server for deployment request "0". Underlying error is: "null"

    weblogic 莫名无法启动: <Apr , :: PM CST> <Error> <Deployer> <BEA-> <Failed to i ...

  5. Presto上使用SQL遇到的一些坑

    本文转载自:https://segmentfault.com/a/1190000013120454?utm_source=tag-newest 最近换了新工作,在数据处理方面,公司是用Presto连接 ...

  6. JAVA基础3---运算符大全

    Java中的运算符有以下种类:算术运算符.关系运算符.位运算符.逻辑运算符.赋值运算符.其他的运算符 现在假设定义 int A = 10,B = 5: 一.算术运算符 运算符 描述 案例 + 等同于数 ...

  7. MongoDB遇到的疑似数据丢失的问题。不要用InsertMany!

    最近做数据备份的时候发现了有个很严重的问题,那就是数据丢失(最后证明没丢,是别的问题造成的). 问题如下: 我通过两种方式在两个mongoDB集群中,对一组collection进行备份,最后2个备份数 ...

  8. Lucene 个人领悟 (三)

    其实接下来就是贴一下代码,熟悉一下Lucene的正常工作流程,或者说怎么使用这个API,更深层次的东西这篇文章不会讲到. 上一篇文章也说了maven的配置,只要你电脑联网就可以下载下来.我贴一下代码. ...

  9. 读QT5.7源码(三)Q_OBJECT 和QMetaObject

    Qt meta-object系统基于三个方面:  1.QObject提供一个基类,方便派生类使用meta-object系统的功能:  2.Q_OBJECT宏,在类的声明体内激活meta-object功 ...

  10. easyui dialog 和 dategrid相关设置与应用

    1 dialog一些参数   可以进行文件上传等操作closed:true:定义初始状态为关闭:modal:true:对话框被打开时,会有一个modal-mask,使得对话框底部的内容被一个层覆盖,不 ...