题目大意:给定n个点,每一个点有一个权值,提供两种操作:

1.将两个点所在集合合并

2.将一个点所在集合的最小的点删除并输出权值

非常裸的可并堆 n<=100W 启示式合并不用想了

左偏树就是快啊~

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define M 1001001
using namespace std;
struct abcd{
abcd *ls,*rs;
int h,pos,score;
abcd(int x,int y);
}*null=new abcd(0,0x3f3f3f3f),*tree[M];
abcd :: abcd(int x,int y)
{
ls=rs=null;
if(!null) h=-1;
else h=0;
pos=x;score=y;
}
abcd* Merge(abcd *x,abcd *y)
{
if(x==null) return y;
if(y==null) return x;
if(x->score>y->score)
swap(x,y);
x->rs=Merge(x->rs,y);
if(x->ls->h<x->rs->h)
swap(x->ls,x->rs);
x->h=x->rs->h+1;
return x;
}
int n,m;
int fa[M];
bool dead[M];
int Find(int x)
{
if(!fa[x]||fa[x]==x)
return fa[x]=x;
return fa[x]=Find(fa[x]);
}
void Unite(int x,int y)
{
x=Find(x);y=Find(y);
if(x==y) return ;
fa[x]=y;
tree[y]=Merge(tree[x],tree[y]);
}
int main()
{ //freopen("1455.in","r",stdin);
//freopen("1455.out","w",stdout); int i,x,y;
char p[10];
cin>>n;
for(i=1;i<=n;i++)
scanf("%d",&x),tree[i]=new abcd(i,x);
cin>>m;
for(i=1;i<=m;i++)
{
scanf("%s",p);
if(p[0]=='M')
{
scanf("%d%d",&x,&y);
if(dead[x]||dead[y])
continue;
Unite(x,y);
}
else
{
scanf("%d",&x);
if(dead[x])
{
puts("0");
continue;
}
x=Find(x);
printf("%d\n",tree[x]->score);
dead[tree[x]->pos]=1;
tree[x]=Merge(tree[x]->ls,tree[x]->rs);
}
}
}

BZOJ 1455 罗马游戏 左偏树的更多相关文章

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

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

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

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

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

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

  4. BZOJ1455 罗马游戏 左偏树 可并堆

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1455 题意概括 n个人,2种操作. 一种是合并两个人团,一种是杀死某一个人团的最弱的人. 题解 左 ...

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

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

  6. BZOJ 1455: 罗马游戏 [可并堆]

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

  7. bzoj 1455: 罗马游戏

    1455: 罗马游戏 Time Limit: 5 Sec  Memory Limit: 64 MB Description 罗马皇帝很喜欢玩杀人游戏. 他的军队里面有n个人,每个人都是一个独立的团.最 ...

  8. BZOJ 1455: 罗马游戏( 配对堆 + 并查集 )

    可并堆水题 --------------------------------------------------------- #include<bits/stdc++.h>   usin ...

  9. bzoj 4003: 城池攻占 左偏树

    题目大意 http://www.lydsy.com/JudgeOnline/problem.php?id=4003 题解 一开始看漏条件了 题目保证当占领城池可以使攻击力乘上\(v_i\)时,一定有\ ...

随机推荐

  1. Django基础必备三件套: HttpResponse render redirect

    1. HttpResponse :  它的作用是内部传入一个字符串参数, 然后发给浏览器 def index(request): return HttpResponse('ok') 2. render ...

  2. Python 35 线程(1)线程理论、开启线程的两种方式

    一:线程理论 1 什么是线程 进程其实一个资源单位,而进程内的线程才是cpu上的执行单位 线程其实指的就是代码的执行过程2 为何要用线程   线程vs进程     1. 同一进程下的多个线程共享该进程 ...

  3. BZOJ 3831 单调队列DP

    思路: 这好像是我刚学单调性的时候做的题 (我是不会告诉你 我被这题教做人了的...) i-stk[head]>k 删队头 f[stk[tail]]>f[i]||(f[stk[tail]] ...

  4. 网络流模板(模板题:POJ1273)

    模板题:POJ1273 EK: #include <queue> #include <cstdio> #include <cstring> #include < ...

  5. 关于EasyUI datagrid editor combogrid搜索框的实现

    首先需要datagrid editor对combogrid的扩展,这个是别人实现的: $.extend($.fn.datagrid.defaults.editors, { combogrid: { i ...

  6. javascript中执行环境和作用域(js高程)

    执行环境(execution context,为简单起见,有时也成为“环境”)是javascript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境 ...

  7. (转)vuex2.0 基本使用(1) --- state

    Vuex 的核心是 store, 它是一个通过 Vuex.Store 构造函数生成的对象.为什么它会是核心呢?因为我们调用这个构造函数创建store 对象的时候,给它传递参数中包装了state, mu ...

  8. 查找索引/ie滤镜/动态背景/属性attr和prop

    1. 查找索引 查找当前元素在指定范围内的索引序号,示例: $('.right_newestState_con').find('em').index($(this)); 2. ie滤镜 利用ie的私有 ...

  9. ★Java语法(三)——————————变量常量

    变量 1.命名规则:变量是标识符,遵循标识符命名规则: 2.作用范围: a 成员变量:作用范围是整个类: package 课上练习; public class 变量 { ; public static ...

  10. 【PostgreSQL-9.6.3】如何得到psql中命令的实际执行SQL

    当我们在psql界面执行以“\”开头的命令时,数据库会立刻返回执行结果,而不会返回命令的实际执行过程.通过两种方式可以实现执行过程的查看: 方法一:启动psql命令时加“-E”参数 postgres@ ...