bzoj1455罗马游戏

题意:

维护数据结构支持合并和弹出最小值。n≤1000000,m≤100000

题解:

可并堆,注意本题合并时要判断两个节点是否在同一个堆中。本弱写了左偏树和斜堆,发现斜堆比左偏树快,不知道为什么,求神犇解答。

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define inc(i,j,k) for(int i=j;i<=k;i++)
 5 #define maxn 1000010
 6 using namespace std;
 7
 8 inline int read(){
 9     char ch=getchar(); int f=1,x=0;
10     while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
11     while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
12     return f*x;
13 }
14 int ch[maxn][2],v[maxn],fa[maxn]; bool die[maxn];
15 int find(int x){while(fa[x])x=fa[x]; return x;}
16 int merge(int x,int y){
17     if(!x||!y)return x+y; if(v[x]>v[y])swap(x,y); ch[x][1]=merge(ch[x][1],y);
18     fa[ch[x][1]]=x; swap(ch[x][0],ch[x][1]); return x;
19 }
20 void pop(int x){
21     fa[ch[x][0]]=fa[ch[x][1]]=0; merge(ch[x][0],ch[x][1]); ch[x][0]=ch[x][1]=0;
22 }
23 int n,m; char opt[3];
24 int main(){
25     n=read(); inc(i,1,n)v[i]=read(); m=read();
26     inc(i,1,m){
27         scanf("%s",opt);
28         if(opt[0]=='M'){
29             int a=read(),b=read(); if(die[a]||die[b])continue; int aa=find(a),bb=find(b);
30             if(aa==bb)continue; merge(aa,bb);
31         }
32         if(opt[0]=='K'){
33             int a=read(); if(die[a]||a>n)puts("0");else{
34                 int aa=find(a); pop(aa); die[aa]=1; printf("%d\n",v[aa]);
35             }
36         }
37     }
38     return 0;
39 }

20160810

转载于:https://www.cnblogs.com/YuanZiming/p/5769449.html

bzoj1455罗马游戏*相关推荐

  1. BZOJ1455罗马游戏

    左偏树裸题 (搞板子搞到绝望x //罗马游戏 #include <bits/stdc++.h> using namespace std; const int N = 1000050; in ...

  2. bzoj1455 罗马游戏

    Description 罗马皇帝很喜欢玩杀人游戏. 他的军队里面有n个人,每个人都是一个独立的团.最近举行了一次平面几何测试,每个人都得到了一个分数. 皇帝很喜欢平面几何,他对那些得分很低的人嗤之以鼻 ...

  3. BZOJ1455: 罗马游戏

    裸可并堆 #include<cstdio> #include<iostream> #include<cstring> #include<cmath> # ...

  4. [bzoj1455]罗马游戏

    题目大意 需要兹瓷集合合并与删去集合内最小值. 可并堆 还能说什么呢,裸的-- #include<cstdio> #include<algorithm> #define fo( ...

  5. 【bzoj1455】罗马游戏 可并堆

    [bzoj1455]罗马游戏 可并堆 2016-05-31  10:04:41 可并堆的裸题. 左偏树(小根堆为例 性质 1.满足堆的性质,每个节点权值小于左右儿子权值 2.每个节点有dis值,表示子 ...

  6. 【BZOJ1455】罗马游戏(左偏树)

    [BZOJ1455]罗马游戏(左偏树) 题面 BZOJ 然而权限题. 题解 左偏树模板题. #include<iostream> #include<cstdio> #inclu ...

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

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

  8. nkoj P3138 罗马游戏

    nkoj P3138 罗马游戏 问题描述 罗马皇帝很喜欢玩杀人游戏. 他的军队里面有n个人,每个人都是一个独立的团. 最近举行了一次比武测试,每个人都得到了一个分数. 皇帝对那些得分很低的人嗤之以鼻. ...

  9. 【BZOJ1455】罗马游戏

    [题目链接] 点击打开链接 [思路要点] 可并堆模板题. [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 10 ...

最新文章

  1. mingw控制台中文乱码
  2. USB协议基础知识笔记
  3. Hive时间是String格式截取字串和转换数据类型小贴士
  4. Three.js中自定义控制几何体的点和面的属性
  5. 什么用于创建python与数据库之间的链接_python3连接数据库用什么
  6. 实现多线程的方式之实现Callable接口
  7. 产品经理思维模型:创新价值曲线
  8. 基础学习:高斯混合模型GMM
  9. 多线程--对象及变量的并发访问
  10. 编程实现二叉树的遍历
  11. Python简单方法实现英文文本词频统计
  12. 1487 C. Minimum Ties
  13. PAT L1-046 整除光棍 光棍当然不是单身汪呢
  14. Error:A JNI error has occurred, please check your installation and try again的解决方法
  15. 2018版 主流SDR设备横向比较
  16. runHiC分析HiC_seq数据
  17. 2019 杭电 多校第3场 1006 Fansblog (HDU 6608)
  18. SpringBoot项目访问jsp页面500问题处理
  19. CMMI-技术评审管理方案
  20. 【从入门到精通 项目1】项目经理带你-零基础学习C/C++

热门文章

  1. 由一个骂评引发的作者产品体验报告-----我要集气
  2. uniapp应用和页面生命周期
  3. 博士后申请攻略:从大陆申请海外的postdoc
  4. 高考数学辅导:解三角形的综合应用-图文(解析版)
  5. latex 图片、表格、定义、理论 简单示例
  6. 华科与东北大学计算机专业,东北地区“赫赫有名”的5所大学,个个实力雄厚,有你的母校没?...
  7. ASP.NET网页间传递参数
  8. 苹果osx系统切换中文
  9. 7个管理学常用工具:SWOT、PDCA、6W2H、SMART、WBS、二八原则
  10. LAP, UTKFace,webface, morph II 人脸数据集