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

题面

BZOJ

洛谷

题解

考虑一下这道题目的性质吧。思考一下最后插入进来的数是什么样子的。首先因为它是最后插入进来的,所以一定是比某个数小,然后把这个数作为一个根,原来的树根直接接到了左儿子上面,因此它没有右儿子。然而显然可以同时有多个儿子没有右子树。再想想,显然的,每次都是交换路径上的左右儿子,然后插入到左儿子中,所以显然最后插入的这个点是一路插进左儿子的。所以每次找到最靠左的、并且没有右儿子的位置,然后再判断一下它的左儿子是否只有一个点,否则优先选左儿子(保证字典序更小)。

#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]斜堆(性质题)的更多相关文章

  1. BZOJ1078 [SCOI2008]斜堆 堆

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

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

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

  3. BZOJ1078: [SCOI2008]斜堆

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1078 每一次进入的点一定是一个极左节点,然后将它所处在的整棵树左右翻转.加上一些情况的处理. ...

  4. 【bzoj1078】[SCOI2008]斜堆

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

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

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

  6. BZOJ 1078: [SCOI2008]斜堆

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

  7. 【bzoj1078】 SCOI2008—斜堆

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

  8. [SCOI2008]斜堆

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

  9. P2475 [SCOI2008]斜堆(递归模拟)

    思路 可并堆真是一种神奇的东西 不得不说这道题是道好题,虽然并不需要可并堆,但是能加深对可并堆的理解 首先考虑斜堆的性质,斜堆和左偏树相似,有如下的性质 一个节点如果有右子树,就一定有左子树 最后插入 ...

随机推荐

  1. Hadoop Version History and Feature

    Versions and Features Hadoop has seen significant interest over the past few years. This has led to ...

  2. Java面试题,Java三大特性之一——多态的理解

    首先我们知道Java是一门面向对象的语言 面向对象三大特性,封装.继承.多态. 封装.继承.多态 ↓ 无论是学习路线,还是众人的口语习惯,都是按照这个这样进行排序,这是有原因的.因为封装好了才能继承, ...

  3. Android应用安全之数据传输安全

    Android软件通常使用WIFI网络与服务器进行通信.WiFi并非总是可靠的,例如,开放式网络或弱加密网络中,接入者可以监听网络流量:攻击者可能 自己设置WIFI网络钓鱼.此外,在获得root权限后 ...

  4. Huploadify V2.1+ SpringMVC上传文件的实现

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  5. 20155216 Exp9 Web安全基础实践

    Exp9 Web安全基础实践 基础问题回答 1.SQL注入攻击原理,如何防御? 1.对用户的输入进行校验,可以通过正则表达式,双"-"进行转换等. 2.不要使用动态拼装sql,可以 ...

  6. PHP和PHPINFO

    PHP开放源码和跨越平台,PHP可以运行在WINDOWS和多种版本的LINUX上.它不需要任何预先处理而快速反馈结果,它也不需要mod_perl的调整来使您的服务器的内存映象减小.PHP消耗的资源较少 ...

  7. C语言学习之枚举类型

    前言 枚举(enum)类型是计算机编程语言中的一种数据类型.枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内.例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等.如果把 ...

  8. Linux+Nginx+Asp.net Core及守护进程部署

    上篇<Docker基础入门及示例>文章介绍了Docker部署,以及相关.net core 的打包示例.这篇文章我将以oss.offical.site站点为例,主要介绍下在linux机器下完 ...

  9. Reflux系列01:异步操作经验小结

    写在前面 在实际项目中,应用往往充斥着大量的异步操作,如ajax请求,定时器等.一旦应用涉及异步操作,代码便会变得复杂起来.在flux体系中,让人困惑的往往有几点: 异步操作应该在actions还是s ...

  10. CentOS 6.8 安装vsftpd

    简介: vsftpd是“very secure FTP daemon”的缩写,是一个完全免费的.开发源代码的ftp服务器软件. 特点: vsftpd是一款在Linux发行版本中最受推崇的FTP服务器程 ...