思路:

左偏树里面掺了一些并查集的应用

这里放一份左偏树的代码模板

重点就是merge函数了……

int merge(int k1,int k2){
if(!k1||!k2)return k1+k2;
if(tr[k1].w<tr[k2].w)swap(k1,k2);
tr[k1].r=merge(tr[k1].r,k2);
if(tr[tr[k1].l].dis<tr[tr[k1].r].dis)swap(tr[k1].l,tr[k1].r);
tr[k1].dis=tr[tr[k1].r].dis+1;
return k1;
}

插入:合并原树和新节点。

删除最小值:合并左右子树。

删在某个地方的值:打个标记 以后用的时候再忽略

在这道题中 删的时候 找到左右子树 并查集变成它自己 再合并

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 100050
int n,m,root[N],xx,yy,f[N];
struct Tree{int l,r,w,dis;void init(){l=r=dis=0;}}tr[N];
int find(int x){return x==f[x]?x:f[x]=find(f[x]);}
int merge(int k1,int k2){
if(!k1||!k2)return k1+k2;
if(tr[k1].w<tr[k2].w)swap(k1,k2);
tr[k1].r=merge(tr[k1].r,k2);
f[tr[k1].r]=k1;
if(tr[tr[k1].l].dis<tr[tr[k1].r].dis)swap(tr[k1].l,tr[k1].r);
tr[k1].dis=tr[tr[k1].r].dis+1;
return k1;
}
int pop(int x){
tr[x].w/=2;
int l=tr[x].l,r=tr[x].r;
f[l]=l,f[r]=r;
tr[x].init();
int t=merge(l,r);
return merge(x,t);
}
int main(){
while(~scanf("%d",&n)){
for(int i=1;i<=n;i++){
scanf("%d",&tr[i].w);
tr[i].init(),f[i]=i;
}
scanf("%d",&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&xx,&yy);
int fx=find(xx),fy=find(yy);
if(fx==fy)puts("-1");
else{
int tx=pop(fx),ty=pop(fy);
printf("%d\n",tr[merge(tx,ty)].w);
}
}
}
}

最新文章

  1. [JS]应用splice删除多元素时出现的坑
  2. hdu(1171)多重背包
  3. php手册学习
  4. 【web性能】js应该放在html页面的什么位置
  5. 【JavaScript】JavaScript的Function与Object浅析
  6. android UI进阶之实现listview的下拉加载
  7. 团体程序设计天梯赛-练习集L1-020. 帅到没朋友
  8. RHEL7下PXE+NFS+Kickstart无人值守安装操作系统
  9. ThinPHP第二十七天(kindEditor使用,$.each)
  10. 设置android:supportsRtl=&amp;quot;true&amp;quot;无效问题
  11. --@angularJS--指令与控制器之间较复杂的交互demo2
  12. [转载] Thrift原理简析(JAVA)
  13. 跟我一起读postgresql源码(十五)——Executor(查询执行模块之——control节点(上))
  14. mssql学习
  15. datetime日期和时间
  16. npm link &amp; unlink
  17. 2019/02/09 对于KinectFusion 的理解
  18. maven的pom.xml文件详解
  19. Linux 下面 Sqlserver 2017 的简单安装
  20. C#宣告一个变量

热门文章

  1. redis搭建与安装
  2. enterprise architect (EA) 源码生成UML类图,帮助理解项目工程
  3. 笔记本win2008 r2的hyper-v安装centos
  4. CentOS 7.2 (mini) 里iptables防火墙怎么关闭?
  5. C++根据扩展名获取文件图标、类型
  6. JS在页面限制checkbox最大复选数
  7. 【SSH 基础】浅谈Hibernate关系映射(3)
  8. Hadoop入门进阶步步高(二)-文件夹介绍
  9. bzoj2127: happiness(双倍经验最小割)
  10. git的学习笔记整理