博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【模板】左偏树
阅读量:4469 次
发布时间:2019-06-08

本文共 1249 字,大约阅读时间需要 4 分钟。

 

1 #include
2 using namespace std; 3 const int N=100010; 4 int n,m,v[N],color[N],root[N],lc[N],rc[N],dis[N]; 5 bool vis[N]; 6 int find(int k){
return color[k]==k?k:color[k]=find(color[k]);} 7 inline void matain(int k){ 8 if(dis[rc[k]]>dis[lc[k]]) swap(lc[k],rc[k]); 9 dis[k]=dis[lc[k]]+1;10 return;11 }12 int marge(int a,int b){13 if(!a) return b;14 if(!b) return a;15 if(v[a]>v[b]) swap(a,b);16 rc[a]=marge(rc[a],b);17 matain(a);18 return a;19 }20 int pop(int k){21 if(vis[k]) return -1;22 int ck=find(k),ans=v[root[ck]];23 vis[root[ck]]=1;24 root[ck]=marge(lc[root[ck]],rc[root[ck]]);25 return ans;26 }27 int main(){28 int opt,t1,t2,c1,c2;29 scanf("%d%d",&n,&m);30 for(int i=1;i<=n;i++) scanf("%d",&v[i]),root[i]=color[i]=i;31 while(m--){32 scanf("%d%d",&opt,&t1);33 if(opt==1){34 scanf("%d",&t2);35 c1=find(t1),c2=find(t2);36 if(c1!=c2&&!vis[t1]&&!vis[t2]){37 root[c1]=marge(root[c1],root[c2]);38 color[c2]=c1;39 }40 }else{41 printf("%d\n",pop(t1));42 }43 }44 return 0;45 }

 

转载于:https://www.cnblogs.com/mycups/p/8553447.html

你可能感兴趣的文章
Geometry Imager Viewport Filter
查看>>
九度oj 题目1025:最大报销额
查看>>
数字及字符串
查看>>
【转载】OmniGraffle (二)基础绘图和模具
查看>>
一些提高开发效率的 Category
查看>>
拓扑排序基础题——排序
查看>>
转:iphone 申请证书
查看>>
Python就业方向
查看>>
一步步学习SPD2010--第二章节--处理SP网站(3)--创建网站层次架构
查看>>
TCP
查看>>
Excel常用函数大全
查看>>
团队-团队编程项目中国象棋-模块测试过程
查看>>
10个经典的C语言面试基础算法及代码
查看>>
普通的java Ftp客户端的文件上传
查看>>
视图系统
查看>>
Palindromes _easy version
查看>>
vue 小记
查看>>
CURRICULUM VITAE
查看>>
Groovy 程序结构
查看>>
使用 WordPress 的导航菜单
查看>>