欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解


题目传送门 - BZOJ1455


题意概括

  n个人,2种操作。

  一种是合并两个人团,一种是杀死某一个人团的最弱的人。


题解

  左偏树裸题。

  直接上板子。


代码

#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=1000005;
bool isd(char ch){
return '0'<=ch&&ch<='9';
}
void read(int &x){
x=0;
char ch=getchar();
while (!isd(ch))
ch=getchar();
while (isd(ch))
x=(x<<1)+(x<<3)+ch-48,ch=getchar();
}
int n,m,killed[N];
int fa[N],ls[N],rs[N],npl[N],val[N];
int getf(int a){
while (fa[a])
a=fa[a];
return a;
}
int merge(int a,int b){
if (!a||!b)
return a+b;
if (val[a]>val[b])
swap(a,b);
rs[a]=merge(rs[a],b);
fa[rs[a]]=fa[ls[a]]=a;
if (npl[rs[a]]>npl[ls[a]])
swap(rs[a],ls[a]);
npl[a]=npl[rs[a]]+1;
return a;
}
int main(){
scanf("%d",&n);
for (int i=1;i<=n;i++)
read(val[i]),fa[i]=ls[i]=rs[i]=npl[i]=0;
memset(killed,0,sizeof killed);
scanf("%d",&m);
for (int i=1;i<=m;i++){
char op[2];
int a,b;
scanf("%s%d",op,&a);
if (op[0]=='K'){
if (killed[a]){
puts("0");
continue;
}
a=getf(a);
killed[a]=1;
printf("%d\n",val[a]);
fa[ls[a]]=fa[rs[a]]=0;
merge(ls[a],rs[a]);
ls[a]=rs[a]=npl[a]=0;
}
else {
scanf("%d",&b);
if (!killed[a]&&!killed[b]&&getf(a)!=getf(b))
merge(getf(a),getf(b));
}
}
return 0;
}

  

BZOJ1455 罗马游戏 左偏树 可并堆的更多相关文章

  1. [BZOJ1455]罗马游戏 左偏树+并查集

    1455: 罗马游戏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 2285  Solved: 994[Submit][Status][Discuss] ...

  2. bzoj 1455: 罗马游戏 左偏树+并查集

    1455: 罗马游戏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 668  Solved: 247[Submit][Status] Descriptio ...

  3. 1455: 罗马游戏[左偏树or可并堆]

    1455: 罗马游戏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1861  Solved: 798[Submit][Status][Discuss] ...

  4. BZOJ 1455 罗马游戏 ——左偏树

    [题目分析] 左偏树的模板题目,大概就是尽量维护树的深度保持平衡,以及尽可能的快速合并的一种堆. 感觉和启发式合并基本相同. 其实并没有快很多. 本人的左偏树代码自带大常数,借鉴请慎重 [代码] #i ...

  5. BZOJ 1455 罗马游戏 左偏树

    题目大意:给定n个点,每一个点有一个权值,提供两种操作: 1.将两个点所在集合合并 2.将一个点所在集合的最小的点删除并输出权值 非常裸的可并堆 n<=100W 启示式合并不用想了 左偏树就是快 ...

  6. [note]左偏树(可并堆)

    左偏树(可并堆)https://www.luogu.org/problemnew/show/P3377 题目描述 一开始有N个小根堆,每个堆包含且仅包含一个数.接下来需要支持两种操作: 操作1: 1 ...

  7. bzoj2809 [Apio2012]dispatching——左偏树(可并堆)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2809 思路有点暴力和贪心,就是 dfs 枚举每个点作为管理者: 当然它的子树中派遣出去的忍者 ...

  8. bzoj1455: 罗马游戏 + bzoj2809: Dispatching(可并堆)

    昨天看了可并堆是什么,写的是左偏树 大概就是一棵树 1.有左偏性质,即当前根到左叶子节点距离比到右叶子节点距离大 2.有堆性质,堆顶关键字比子树关键字小 合并两个堆的时候,关键字大的插入到关键字小的那 ...

  9. [luogu3377][左偏树(可并堆)]

    题目链接 思路 左偏树的模板题,参考左偏树学习笔记 对于这道题我是用一个并查集维护出了哪些点是在同一棵树上,也可以直接log的往上跳寻找根节点 代码 #include<cstdio> #i ...

随机推荐

  1. python序列(列表,元组,字典)的常用排序

    列表 正向排序 sort() >>> list=[1,6,3,4,5,2] >>> list.sort() >>> list [1, 2, 3, ...

  2. 【原创】大数据基础之Hive(4)hive元数据库核心表结构

    1 dbs +-------+-----------------------+----------------------------------------------+------------+- ...

  3. es2015箭头函数的this

    摘自https://www.cnblogs.com/chenxygx/p/6509564.html,谢谢博主的分享!

  4. VUE 生成二维码(qrcodejs)

    1. 概述 1.1 引入二维码生成模块 npm install qrcodejs2 --save 注意:此处安装qrcodejs2,安装依赖后可在main方法中进行全局引用设置,也可单独某个页面中进行 ...

  5. 21)django-csrf(跨站请求伪造)

    一:目录 1)简介及无CSRF时存在隐患 2)csrf原理 3)csrf 设置 4)Form提交(CSRF) 5)Ajax提交(CSRF) CSRF请求头 X-CSRFToken 二:csrf简介 c ...

  6. Spring+SpringMVC+MyBatis的整合

    1.基本概念   1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-On ...

  7. FTP服务器配置和管理

    一:ftp 简介 1:ftp服务: internet 是一个非常复杂额计算机环境,其中有pc/mac/小型机/大型机等.而在这些计算机上运行的操作系统也是五花八门,有 unix.Linux.微软的wi ...

  8. MONGODB数据基础与命令

  9. css样式之属性操作

    一.文本属性 1.text-align:cnter 文本居中 2.line heigth 垂直居中 :行高,和高度对应 3.设置图片与文本的距离:vertical-align 4.text-decor ...

  10. bzoj 1856

    做这题之前先看道高考真题(好像是真题,我记不清了) 例:已知一个由n个0和n个1排列而成的数列,要求对于任意k∈N*且k∈[1,2n],在前k个数中1的个数不少于0的个数,求当n=4时这样的数列的数量 ...