题意:有n只猴子,m个操作,每一个操作,会让这两堆猴子里的最大的两只打架,打完之后,自身权值减半,然后他们会成为朋友

也就是会属于同一棵树,细节:如果选出的猴子在同一堆,就输出-1,然后下一个操作,不用打架;

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<string.h>
  4. #include<math.h>
  5. using namespace std;
  6. const int maxn=1e5+;
  7. int val[maxn];
  8. int f[maxn];
  9. int ch[maxn][];
  10. int dis[maxn];
  11. int getf(int x) //标准并查集
  12. {
  13. if(f[x]==x) return x;
  14. else{
  15. f[x]=getf(f[x]);
  16. return f[x];
  17. }
  18. }
  19. int Merge(int x,int y)
  20. {
  21. if(!x||!y) return x+y; //到底了;
  22. //保证最小堆性质 后面这个不懂
  23. if(val[x]<val[y]) swap(x,y);
  24. //这个大概就是创这个算法的人的习惯了,将其定在右子树。
  25. //然后再在下面进行操作来满足偏左树的性质;
  26. ch[x][]=Merge(ch[x][],y);
  27. f[ch[x][]]=x; //并查集操作;
  28. //满足偏左;
  29. if(dis[ch[x][]]<dis[ch[x][]]) swap(ch[x][],ch[x][]);
  30. //这个是偏左树的性质,想想就知道是对的。
  31. dis[x]=dis[ch[x][]]+;
  32. return x;
  33. }
  34. int main()
  35. {
  36. int n,m;
  37. while(scanf("%d",&n)!=EOF){
  38. memset(dis,,sizeof(dis));
  39. memset(ch,,sizeof(ch));
  40. for(int i=;i<=n;i++){
  41. scanf("%d",&val[i]);
  42. f[i]=i;
  43. }
  44. scanf("%d",&m);
  45. while(m--){
  46. int t1,t2;
  47. scanf("%d%d",&t1,&t2);
  48. int u=getf(t1);
  49. int v=getf(t2);
  50. if(u==v){
  51. printf("-1\n");
  52. continue;
  53. }
  54. val[u]/=;
  55. int root=Merge(ch[u][],ch[u][]);
  56. ch[u][]=ch[u][]=dis[u]=;
  57. int newx=Merge(root,u);
  58. val[v]/=;
  59. root=Merge(ch[v][],ch[v][]);
  60. ch[v][]=ch[v][]=dis[v]=;
  61. int newy=Merge(root,v);
  62. root=Merge(newx,newy);
  63. f[newx]=f[newy]=root; //这里两个点都要,其实只有一个点需要,
  64. //因为只有一个点的父节点没有从已经被减半的根节点那更新回来。
  65. //需要更新的点是根节点;
  66. printf("%d\n",val[root]);
  67. }
  68. }
  69. return ;
  70. }

左偏树(p1456) 比较模板的一道题的更多相关文章

  1. 左偏树 P3377【模板】左偏树(可并堆)

    题目传送门 代码: /* code by: zstu wxk time: 2019/03/01 */ #include<bits/stdc++.h> using namespace std ...

  2. 左偏树(p4431)

    难得不是左偏树,而是思维: 这道题在做得时候,有两个性质 1.如果a是一个不下降序列,那么b[i]==a[i]时取得最优解. 2.如果a是一个严格递减序列,则取a序列的中位数x,令b[1]=b[2]= ...

  3. 洛谷 P3377 【模板】左偏树(可并堆)

    洛谷 P3377 [模板]左偏树(可并堆) 题目描述 如题,一开始有N个小根堆,每个堆包含且仅包含一个数.接下来需要支持两种操作: 操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或 ...

  4. [Luogu3377]【模板】左偏树(可并堆)

    题面戳我 题目描述 如题,一开始有N个小根堆,每个堆包含且仅包含一个数.接下来需要支持两种操作: 操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或第y个数已经被删除或第x和第y个数 ...

  5. HDU 1512 Monkey King(左偏树模板题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1512 题意: 有n只猴子,每只猴子一开始有个力量值,并且互相不认识,现有每次有两只猴子要决斗,如果认识,就不打了 ...

  6. 【bzoj1455】【罗马游戏】左偏树+并查集(模板)

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

  7. 模板 可并堆【洛谷P3377】 【模板】左偏树(可并堆)

    P3377 [模板]左偏树(可并堆) 如题,一开始有N个小根堆,每个堆包含且仅包含一个数.接下来需要支持两种操作: 操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或第y个数已经被删 ...

  8. 洛谷 P3377 模板左偏树

    题目:https://www.luogu.org/problemnew/show/P3377 左偏树的模板题: 加深了我对空 merge 的理解: 结构体的编号就是原序列的位置. 代码如下: #inc ...

  9. P3378 【模板】堆 (内含左偏树实现)

    P3378 [模板]堆 题解 其实就是一个小根堆啦,STL就可以解决,但是拥有闲情雅致的我学习了Jelly_Goat的左偏树,增加了代码长度,妙啊 Solution 1 STL STL 里面prior ...

  10. 洛谷P3377 【模板】左偏树(可并堆) 题解

    作者:zifeiy 标签:左偏树 这篇随笔需要你在之前掌握 堆 和 二叉树 的相关知识点. 堆支持在 \(O(\log n)\) 的时间内进行插入元素.查询最值和删除最值的操作.在这里,如果最值是最小 ...

随机推荐

  1. 如何将.sql文件导入到mysql的数据库中

    首先通过cmd的net start mysql57 启动mysql的服务器 然后,输入命令:mysql -h 127.0.0.1 -u root -p来启动mysql服务 最后 上图画红圈的部分是.s ...

  2. 【安卓开发】Webview简单使用

    什么是WebView? 答:Android内置webkit内核的高性能浏览器,而WebView则是在这个基础上进行封装后的一个 控件,WebView直译网页视图,我们可以简单的看作一个可以嵌套到界面上 ...

  3. Wannafly Camp 2020 Day 6K 最大权值排列

    按照样例那样排列即可 #include <bits/stdc++.h> using namespace std; int main() { int n; cin>>n; if( ...

  4. arm学习笔记

    学习ARM也有一定时间了,想想还是记点东西,要不以后就忘了.这是我的第一片,简简单单.但比较基础.1. ARM中一些常见英文缩写解释MSB:最高有效位:LSB:最低有效位:AHB:先进的高性能总线:V ...

  5. python之路递归、冒泡算法、装饰器

    map使用 完整用户名登录,注册 冒泡排序 递归 def func(arg1,arg2): if arg1 == 0: print arg1, arg2 arg3 = arg1 + arg2 prin ...

  6. Go变量与常量

    变量与常量 变量声明 定义变量时指定变量类型式 定义变量时依靠类型推断 go是静态,强类型语言(java,c++也是如此). 静态语言: 在编译时就能确定变量类型的语言,类型推导在编译阶段可以不用指明 ...

  7. PHP 中 16 个魔术方法详解

    PHP 中 16 个魔术方法详解   前言 PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __constru ...

  8. Django | mysql修改个别表后save()报错

    报错内容: elasticsearch.exceptions.ConnectionError: ConnectionError(<urllib3.connection.HTTPConnectio ...

  9. TP5和TP3.2的使用区别

    模板标签不一样: TP5 可在配置文件中自行定义自己喜欢的标签 TP5  使用双标签 如:{foreach} {/foreach} TP3 : <> TP5 :{} 调用数据表方式: M( ...

  10. d2admin框架学习

    <template slot-scope="scope"> <el-button @click="upper_score(scope.$index, s ...