【算法】可并堆(左偏树)

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. const int maxn=;
  5. int l[maxn],r[maxn],fa[maxn],d[maxn],a[maxn],n,m;
  6. bool die[maxn];//0生1死
  7. int find(int x)
  8. {return fa[x]==x?x:fa[x]=find(fa[x]);}
  9. int merge(int x,int y)//返回x和y合并后子树的根
  10. {
  11. if(!x)return y;
  12. if(!y)return x;//遇到一边为空节点则把另一边剩余的子树整颗接上去(返回)
  13. if(a[x]>a[y])swap(x,y);//将根节点更小的树放在左边
  14. r[x]=merge(r[x],y);//递归合并左树右孩子和右树
  15. if(d[l[x]]<d[r[x]])swap(l[x],r[x]);//维护左偏性质
  16. d[x]=d[r[x]]+;//更新节点距离
  17. return x;//返回新树根
  18. }
  19. int main()
  20. {
  21. scanf("%d",&n);
  22. for(int i=;i<=n;i++)scanf("%d",&a[i]);
  23. for(int i=;i<=n;i++)fa[i]=i;
  24. d[]=-;//因为后面的空节点都表示为0,因此会多次调用0。
  25. scanf("%d",&m);
  26. for(int i=;i<=m;i++)
  27. {
  28. char c=getchar();
  29. while(c!='M'&&c!='K')c=getchar();
  30. if(c=='M')
  31. {
  32. int x,y;
  33. scanf("%d%d",&x,&y);
  34. if(die[x]||die[y])continue;
  35. int p=find(x),q=find(y);
  36. if(p!=q)
  37. {
  38. int t=merge(p,q);//t是新根,可能是fa[x]或fa[y]
  39. fa[p]=fa[q]=t;//p,q的父亲变为新根,其他点父亲均不变
  40. }
  41. }
  42. else
  43. {
  44. int x;
  45. scanf("%d",&x);
  46. if(die[x]){printf("0\n");continue;}
  47. int p=find(x);die[p]=;
  48. printf("%d\n",a[p]);
  49. fa[p]=merge(l[p],r[p]);//返回新根(l[p]或r[p]),令原根的父亲为新根,由于并查集,不需要再修改
  50. fa[fa[p]]=fa[p];//注意改变新根的父亲
  51. //为什么不能直接加个if判断新根左右然后修改左右父亲啊?改完交了RE,存疑……
  52. }
  53. }
  54. return ;
  55. }

另有蒟蒻WA的代码,错误已标注。

WA Code >_<

【BZOJ】1455 罗马游戏的更多相关文章

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

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

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

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

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

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

  4. bzoj 1455: 罗马游戏

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

  5. BZOJ 1455 罗马游戏 左偏树

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

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

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

  7. 【BZOJ 1455】 1455: 罗马游戏 (可并堆-左偏树+并查集)

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

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

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

  9. 【BZOJ-1455】罗马游戏 可并堆 (左偏树)

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

随机推荐

  1. css那些事儿2 盒子模型

    盒子模型是网页元素所占据页面窗口的矩形范围,是网页布局的核心基础之一,这里的盒子模型与我们平常收到的包裹类似. 一个包裹从内到外,分为真实物品部分,物品与外壳之间的填充区,外壳的厚度,当多个包裹放置在 ...

  2. PHP连接Redis操作函数

    phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github.com/ow ...

  3. MySQL加密算法

    1.不可逆加密: PASSWORD(),ENCRYPT(,),MD5(),SHA5(). 2.可逆的加密算法: ENCODE(,)   DECODE(,):加密解密字符串.该函数有两个参数:被加密或解 ...

  4. python爬虫从入门到放弃(五)之 正则的基本使用(转)

    什么是正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是 事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符”,这个“规则字符” 来表达对字符的一种过滤逻辑. 正则并不是pyth ...

  5. Django Models相关

    Models的相关知识 1. AutoField:自增整数类型.根据 ID 自增长的 Int字段 2. IntegerField:整数类型 3. BigIntegerField:大整数类型.用于数值较 ...

  6. 【刷题】BZOJ 3527 [Zjoi2014]力

    Description 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. Input 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. n≤100000,0<qi ...

  7. 后缀数组SA学习笔记

    什么是后缀数组 后缀数组\(sa[i]\)表示字符串中字典序排名为\(i\)的后缀位置 \(rk[i]\)表示字符串中第\(i\)个后缀的字典序排名 举个例子: ababa a b a b a rk: ...

  8. Android <Android应用开发实战> 资源类型<二>

    1.菜单资源菜单不仅可以在onCreateContextMenu或onCreateOptionsMenu方法中通过代码创建,还可以在res/menu目录中建立相应的菜单资源文件,并在上面两个方法中加载 ...

  9. BZOJ1926:[SDOI2010]粟粟的书架——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1926 https://www.luogu.org/problemnew/show/P2468 幸福幼 ...

  10. mybatis的Mapper代理原理

    前言:在mybatis的使用中,我们会习惯采用XXMapper.java+XXMapper.xml(两个文件的名字必须保持一致)的模式来开发dao层,那么问题来了,在XXMapper的文件里只有接口, ...