【XSY1986】【BZOJ1455】罗马游戏
就是一模板题。
合并就直接merge。
pop就是将自己的值设为一,再将自己的左右儿子合并即可。
查询直接找到堆顶,输出。
代码:
#include<bits/stdc++.h>
using namespace std;
int dis[1000001],ch[1000001][2],fa[1000001],n,m,x,y,xx,yy,val[1000001];
char op[2];
int merge(int x,int y)
{
if(!x||!y)
{
return x+y;
}
if(val[x]>val[y]||(val[x]==val[y]&&x>y))
{
swap(x,y);
}
ch[x][1]=merge(ch[x][1],y);
if(dis[ch[x][0]]<dis[ch[x][1]])
{
swap(ch[x][0],ch[x][1]);
}
fa[x]=fa[ch[x][0]]=fa[ch[x][1]]=x;
dis[x]=dis[ch[x][1]]+1;
return x;
}
int getfa(int x)
{
if(x!=fa[x])
{
return fa[x]=getfa(fa[x]);
}
return x;
}
void pop(int x)
{
val[x]=-1;
fa[ch[x][0]]=ch[x][0];
fa[ch[x][1]]=ch[x][1];
fa[x]=merge(ch[x][0],ch[x][1]);
}
int main()
{
scanf("%d",&n);
dis[0]=-1;
for(int i=1;i<=n;i++)
{
fa[i]=i;
scanf("%d",&val[i]);
}
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
scanf("%s%d",op,&x);
if(op[0]=='M')
{
scanf("%d",&y);
if(x==y||val[x]==-1||val[y]==-1)
{
continue;
}
xx=getfa(x);
yy=getfa(y);
if(xx!=yy)
{
fa[xx]=fa[yy]=merge(xx,yy);
}
}else{
if(val[x]==-1)
{
puts("0");
}else{
xx=getfa(x);
printf("%d\n",val[xx]);
pop(xx);
}
}
}
return 0;
}
【XSY1986】【BZOJ1455】罗马游戏的更多相关文章
- [bzoj1455]罗马游戏_左偏树_并查集
罗马游戏 bzoj-1455 题目大意:给你n个人,2种操作,m次操作:1.将i号士兵所在的集合的最小值删除 2.合并i和j两个士兵所在的团体 注释:$1\le n\le 10^6$,$1\le m ...
- [BZOJ1455]罗马游戏 左偏树+并查集
1455: 罗马游戏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 2285 Solved: 994[Submit][Status][Discuss] ...
- Bzoj1455 罗马游戏
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1622 Solved: 679 Description 罗马皇帝很喜欢玩杀人游戏. 他的军队里面有n个人 ...
- 【数据结构】bzoj1455罗马游戏
Description 罗马皇帝很喜欢玩杀人游戏. 他的军队里面有n个人,每个人都是一个独立的团.最近举行了一次平面几何测试,每个人都得到了一个分数. 皇帝很喜欢平面几何,他对那些得分很低的人嗤之以鼻 ...
- bzoj1455: 罗马游戏 + bzoj2809: Dispatching(可并堆)
昨天看了可并堆是什么,写的是左偏树 大概就是一棵树 1.有左偏性质,即当前根到左叶子节点距离比到右叶子节点距离大 2.有堆性质,堆顶关键字比子树关键字小 合并两个堆的时候,关键字大的插入到关键字小的那 ...
- BZOJ1455 罗马游戏 左偏树 可并堆
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1455 题意概括 n个人,2种操作. 一种是合并两个人团,一种是杀死某一个人团的最弱的人. 题解 左 ...
- BZOJ1455——罗马游戏
1.题目大意:维护一个数据结构,可以实现合并操作,还能询问最小值 2.分析:这种问题当然是可并堆啦 随便写了一个左偏树QAQ #include <cstdio> #include < ...
- [BZOJ1455]罗马游戏(左偏树)
用并查集和左偏树维护士兵的关系 Code #include <cstdio> #include <algorithm> #define N 1000010 using name ...
- BZOJ1455罗马游戏
左偏树裸题. 题面描述让人意识到了平面几何的重要性. //Achen #include<algorithm> #include<iostream> #include<cs ...
- 【BZOJ1455】罗马游戏(左偏树)
[BZOJ1455]罗马游戏(左偏树) 题面 BZOJ 然而权限题. 题解 左偏树模板题. #include<iostream> #include<cstdio> #inclu ...
随机推荐
- JavaScript系列:函数式编程(开篇)
前言: 上一篇介绍了 函数回调,高阶函数以及函数柯里化等高级函数应用,同时,因为正在学习JavaScript·函数式编程,想整理一下函数式编程中,对于我们日常比较有用的部分. 为什么函数式编程很重要? ...
- ieTESTER浏览器使用ie6崩溃问题
打开浏览器在选项--internet属性--连接--局域网设置--将自动检测设置的对勾勾掉就可以 重启下浏览器
- python - json模块使用 / 快速入门
json基本格式 """ json格式 -> [{}, {}]: [{ "name": "Bob", "gende ...
- Python3 学习笔记之 变量/字符串/if/while/逻辑运算符/模块引用
变量/if/while/逻辑运算符/模块引用: 变量: 使用变量前必须先赋值. 大小写区分. Python创建字符串,在字符串两边可以加上单引号或者双引号. 打印单引号或双引号,使用转移\ 使用\进行 ...
- 网络游戏开发-客户端2(自定义websocket协议格式)
Egret官方提供了一个Websocket的库,可以让我们方便的和服务器长连接交互. 标题写的时候自定义websocket的协议格式.解释一下,不是说我们去动websocket本身的东西,我们是在we ...
- 自学导航页(待续ing)
1 博客导航1.1 linuxlinux全线教程–提供了linux教程,服务器管理教程,BSD教程,还有编程语言(C/Java/Python/Perl),以及网络等全栈学习教程 1.2 存储技术NoS ...
- Python中的option Parser
一般来说,Python中有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse, ...
- SQL SERVER 日志如何进行收缩?
最近经历了一次服务器SQL SERVER 数据库服务器端事务日志爆满,导致服务器数据库写入不进数据的宕机事件,经过此次事件的发生,奉劝各位同仁一句,如果没有绝对的充足存储空间,数据库事务日志文 ...
- java零碎知识(每种数据类型默认值,多大,取值范围)
只要记下字节就好了 其它不必死记,取值范围:没有正负的,2的 字节数*8次方-1 , 凡是有正负的2的 (字节数*8)-1次方 -1 比如: 1.byte(有正负):先计算是2的几次方:字节数1*( ...
- PowerBI系列之入门案例动态销售报告
本文将讲解如何从零开始使用PowerBI Desktop制作一份动态销售报告.帮助大家快速入门PowerBI Desktop的操作.我们先来看一下一份动态销售报告的构成. 1.左上角放置了小黎子数据分 ...