[BZOJ1455]罗马游戏(左偏树)
用并查集和左偏树维护士兵的关系
Code
#include <cstdio>
#include <algorithm>
#define N 1000010
using namespace std; int n,m,fa[N];
bool gg[N]; int Find(int x){return x==fa[x]?x:fa[x]=Find(fa[x]);}
namespace Lt{
int l[N],r[N],v[N],d[N];
int merge(int x,int y){
if(!x||!y) return x+y;
if(v[x]>v[y]) swap(x,y);
r[x]=merge(r[x],y);
if(d[r[x]]>d[l[x]]) swap(l[x],r[x]);
d[x]=d[r[x]]+1;
return x;
}
inline int tp(int x){return v[x];}
inline void pop(int x){
fa[x]=merge(l[x],r[x]);
fa[fa[x]]=fa[x];
}
} inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
} int main(){
n=read();
for(int i=1;i<=n;++i) Lt::v[i]=read(),fa[i]=i;
m=read();
while(m--){
char ch;for(ch=getchar();ch!='M'&&ch!='K';ch=getchar());
if(ch=='K'){
int x=read(),p;
if(gg[x]) puts("0");
else{
gg[p=Find(x)]=1;
printf("%d\n",Lt::v[p]);
Lt::pop(p);
}
}else{
int x=read(),y=read();
if(gg[x]||gg[y]) continue;
int px=Find(x),py=Find(y);
if(px!=py) fa[px]=fa[py]=Lt::merge(px,py);
}
}
return 0;
}
[BZOJ1455]罗马游戏(左偏树)的更多相关文章
- BZOJ1455 罗马游戏 左偏树 可并堆
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1455 题意概括 n个人,2种操作. 一种是合并两个人团,一种是杀死某一个人团的最弱的人. 题解 左 ...
- [BZOJ1455]罗马游戏 左偏树+并查集
1455: 罗马游戏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 2285 Solved: 994[Submit][Status][Discuss] ...
- bzoj 1455: 罗马游戏 左偏树+并查集
1455: 罗马游戏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 668 Solved: 247[Submit][Status] Descriptio ...
- 1455: 罗马游戏[左偏树or可并堆]
1455: 罗马游戏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1861 Solved: 798[Submit][Status][Discuss] ...
- BZOJ 1455 罗马游戏 ——左偏树
[题目分析] 左偏树的模板题目,大概就是尽量维护树的深度保持平衡,以及尽可能的快速合并的一种堆. 感觉和启发式合并基本相同. 其实并没有快很多. 本人的左偏树代码自带大常数,借鉴请慎重 [代码] #i ...
- BZOJ 1455 罗马游戏 左偏树
题目大意:给定n个点,每一个点有一个权值,提供两种操作: 1.将两个点所在集合合并 2.将一个点所在集合的最小的点删除并输出权值 非常裸的可并堆 n<=100W 启示式合并不用想了 左偏树就是快 ...
- 【BZOJ1455】罗马游戏(左偏树)
[BZOJ1455]罗马游戏(左偏树) 题面 BZOJ 然而权限题. 题解 左偏树模板题. #include<iostream> #include<cstdio> #inclu ...
- [bzoj1455]罗马游戏_左偏树_并查集
罗马游戏 bzoj-1455 题目大意:给你n个人,2种操作,m次操作:1.将i号士兵所在的集合的最小值删除 2.合并i和j两个士兵所在的团体 注释:$1\le n\le 10^6$,$1\le m ...
- 【BZOJ-1455】罗马游戏 可并堆 (左偏树)
1455: 罗马游戏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1355 Solved: 561[Submit][Status][Discuss] ...
- 【bzoj1455】【罗马游戏】左偏树+并查集(模板)
Description 罗马皇帝很喜欢玩杀人游戏. 他的军队里面有n个人,每个人都是一个独立的团.最近举行了一次平面几何测试,每个人都得到了一个分数. 皇帝很喜欢平面几何,他对那些得分很低的人嗤之以鼻 ...
随机推荐
- March 19 2017 Week 12 Sunday
If you want it, work for it. It's that simple. 很简单,想要什么,就为之努力吧. Yes, it is very simple. Many of us j ...
- 初识EMC
EMC,即电磁兼容,是指设备在预期的电磁环境中,能按设计要求正常抵抗电磁干扰的能力.其主要包含3个方面:电磁干扰(EMI),电磁抗扰(EMS)与静电放电抗扰(ESD). 电磁干扰的方式可以大概分为传导 ...
- 从产品展示页面谈谈Hybris系列之二: DTO, Converter和Populator
文章作者:张健(Zhang Jonathan) 上一篇文章 从产品展示页面谈谈Hybris的特有概念和设计结构 我们讲解了Hybris一些特有的概念以及大体架构,并且介绍了Facade层里是如何定义D ...
- IOS 应用管理(九宫格) 总结笔记
1. 开发前的思路 ========================================1> 从mainBundle中加载Plist2> 按照plist中的数据数量先确定各个a ...
- bzoj5000 OI树
Description 几天之后小跳蚤即将结束自己在lydsy星球上的旅行.这时,lydsy人却发现他们的超空间传送装置的能量早在小跳蚤通过石板来到lydsy星球时就已经消耗光了.这时,小跳蚤了解到自 ...
- 论C/C++数据在内存中的二进制存放形式
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010518429/article/details/30332237 // enter any ty ...
- 2017.9.11 初入HTML学习
第二章 静态网页开发技术 静态网页是指可以由浏览器解释执行而生成的网页,HTML是一组标签,负责网页的基本表现形式: JavaScript是在客户端浏览器运行的语言,负责在客户端与用户的互 ...
- miniMobile(手机)
官网:http://www.web2014.cn/
- 原生js 异步请求,responseXML解析
异步更新原理:用XMLHTTP发送请求得到服务器端应答数据,在不重新载入整个页面的情况下,用js操作Dom最终更新页面1.创建XMLHttp请求协议 function createXMLHttpReq ...
- JS获取浏览器高度和宽度
IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象高度 document.d ...