2021.08.01 P3377 左偏树模板

P3377 【模板】左偏树(可并堆) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. using namespace std;
  5. #define aa 100010
  6. int n,m,vis[aa],fa[aa];
  7. struct node{
  8. int ls,rs,val,dis;
  9. }a[aa];
  10. inline int read(){
  11. int s=0,w=1;
  12. char ch=getchar();
  13. while(ch<'0'||ch>'9'){
  14. if(ch=='-')w=-1;
  15. ch=getchar();
  16. }
  17. while(ch<='9'&&ch>='0'){
  18. s=s*10+ch-'0';
  19. ch=getchar();
  20. }
  21. return s*w;
  22. }
  23. int find(int x){
  24. return fa[x]==x?x:fa[x]=find(fa[x]);
  25. }
  26. int merge(int x,int y){
  27. if(!x||!y)return x+y;
  28. if(a[x].val ==a[y].val?x>y:a[x].val>a[y].val)
  29. swap(x,y);//x<y
  30. a[x].rs =merge(a[x].rs ,y);
  31. if(a[a[x].ls ].dis <a[a[x].rs].dis)
  32. swap(a[x].ls,a[x].rs);
  33. fa[x]=fa[a[x].ls]=fa[a[x].rs]=x;
  34. a[x].dis=a[a[x].rs].dis+1;
  35. return x;
  36. }
  37. void pop(int x){
  38. vis[x]=1;
  39. fa[a[x].ls]=a[x].ls;
  40. fa[a[x].rs]=a[x].rs;
  41. fa[x]=merge(a[x].ls,a[x].rs);
  42. a[x].ls=a[x].rs=a[x].dis=0;
  43. }
  44. int main(){
  45. n=read();m=read();
  46. for(int i=1;i<=n;i++)a[i].val=read(),fa[i]=i;
  47. a[0].dis=-1;
  48. while(m--){
  49. int x;
  50. x=read();
  51. if(x==1){
  52. int u,v,ui,vi;
  53. u=read();v=read();
  54. if(vis[u]||vis[v])continue;
  55. ui=find(u);vi=find(v);
  56. if(ui!=vi)fa[ui]=fa[vi]=merge(ui,vi);
  57. }else if(x==2){
  58. int u,ui;
  59. u=read();
  60. if(vis[u]){
  61. cout<<"-1"<<endl;
  62. continue;
  63. }
  64. ui=find(u);
  65. cout<<a[ui].val<<endl;
  66. pop(ui);
  67. }
  68. }
  69. //for(int i=1;i<=n;i++)cout<<fa[i]<<" ";cout<<endl;//
  70. return 0;
  71. }

2021.08.01 P3377 左偏树模板的更多相关文章

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

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

  2. [模板][P3377]左偏树

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

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

    题目连接:https://www.luogu.org/problemnew/show/P3377 #include <cstdio> #include <cstring> #i ...

  4. 洛谷 [P3377] 左偏树(可并堆)

    可并堆,就是可以合并的堆 注意并查集不能路径压缩,不然删除根节点时会出错 #include <iostream> #include <cstring> #include < ...

  5. 洛谷 P3377 模板左偏树

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

  6. 洛谷 - P3377 - 【模板】左偏树(可并堆) - 左偏树 - 并查集

    https://www.luogu.org/problemnew/show/P3377 左偏树+并查集 左偏树维护两个可合并的堆,并查集维护两个堆元素合并后可以找到正确的树根. 关键点在于删除一个堆的 ...

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

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

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

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

  9. 【BZOJ2809】[APIO2012] dispatching(左偏树例题)

    点此看题面 大致题意: 有\(N\)名忍者,每名忍者有三个属性:上司\(B_i\),薪水\(C_i\)和领导力\(L_i\).你要选择一个忍者作为管理者,然后在所有被他管理的忍者中选择若干名忍者,使薪 ...

随机推荐

  1. corn计划周期任务

                                                                             corn计划任务 1.计划任务有四种方式   cron ...

  2. activemq 使用经验

    activemq 使用经验   ActiveMQ 是apache的一个开源JMS服务器,不仅具备标准JMS的功能,还有很多额外的功能.公司里引入ActiveMQ后,ActiveMQ成里我们公司业 务系 ...

  3. 你能用Java覆盖静态方法吗?如果我在子类中创建相同的方法是编译时错误?

    不,你不能在Java中覆盖静态方法,但在子类中声明一个完全相同的方法不是编译时错误,这称为隐藏在Java中的方法.你不能覆盖Java中的静态方法,因为方法覆盖基于运行时的动态绑定,静态方法在编译时使用 ...

  4. maven常用命令含义

    今天在开发过程中,对一个mapper.xml文件的sql进行了改动,重启tomcat后发现没有生效,首先考虑是不是远程服务开启着,导致代码没有走本地,确认远程服务是关闭的,的确是本地修改没有生效,于是 ...

  5. jQuery--内容过滤和可见性过滤

    一.内容过滤 1.内容过滤选择器介绍 :empty 当前元素是否为空(是否有标签体) :contains(text)   标签体是否含有指定的文本 :has(...)                 ...

  6. kafka指定partiton生产

    kafka发送一个消息的时候需要封装成一个ProducerRecord : public ProducerRecord(String topic, Integer partition, Long ti ...

  7. 本地存储和cookies之间的区别是什么?

    cookies本地存储客户端/服务器端既可以从客户端也可以从服务器端访问数据.每个请求都会发送cookie数据到服务器.只能在本地浏览器端访问数据.服务器无法访问本地存储,除非特意通过POST或GET ...

  8. Mybatis入门程序(一)

    1.入门程序实现需求 根据用户id查询一个用户信息 根据用户名称模糊查询用户信息列表 添加用户(二) 更新用户(二) 删除用户(二) 2.引入Mybatis所需 jar 包(Maven工程) < ...

  9. 【C语言】预处理、宏定义、内联函数 _

    一.由源码到可执行程序的过程 1. 预处理: 源码经过预处理器的预处理变成预处理过的.i中间文件   1 gcc -E test.c -o test.i 2. 编译: 中间文件经过编译器编译形成.s的 ...

  10. 在一个元素上:hover,改变另一个元素的css属性

    如果二者是父子关系,可以写成这种: .face:hover .eye-bottom { margin-top: 30px; } 如果是兄弟关系: .face:hover+.ear-wrap { tra ...