1455: 罗马游戏|左偏树
来源:互联网 发布:python 文件读取 编辑:程序博客网 时间:2024/06/10 02:35
写个stl被卡内存..woc..smg非得逼我学左偏树..
似乎比堆更好写的样子。
有一个值得注意的细节,删除节点的时候别忘了
#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue>#include<vector>#include<set>#include<map>#include<iostream>#include<algorithm>#define pa pair<int,int>#define ll long long#define N 1000005#define mx 1e9using namespace std;int sc(){ int i=0,f=1; char c=getchar(); while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar(); return i*f;}int n,m,fa[N],l[N],r[N],d[N],v[N];bool die[N];int find(int x){ return fa[x]==x?x:fa[x]=find(fa[x]);}int merge(int x,int y){ if(x*y==0)return x+y; if(v[x]>v[y])swap(x,y); r[x]=merge(r[x],y); if(d[r[x]]>d[l[x]])swap(l[x],r[x]); d[x]=d[r[x]]+1; return x;}int main(){ n=sc(); for(int i=1;i<=n;i++) v[fa[i]=i]=sc(); d[0]=-1; m=sc(); while(m--) { char s[5]; scanf("%s",s); if(s[0]=='K') { int x=sc(),fx=find(x); if(die[x]){puts("0");continue;} printf("%d\n",v[fx]); die[fx]=1; fa[fx]=merge(l[fx],r[fx]); fa[fa[fx]]=fa[fx]; } else { int x=sc(),y=sc(); if(die[x]||die[y])continue; int fx=find(x),fy=find(y); if(fx!=fy) fa[fx]=fa[fy]=merge(fx,fy); } } return 0;}
0 0
- 1455: 罗马游戏 左偏树
- 1455: 罗马游戏|左偏树
- BZOJ 1455 罗马游戏 左偏树
- bzoj 1455: 罗马游戏 左偏树
- 【BZOJ】1455 罗马游戏 左偏树
- BZOJ 1455: 罗马游戏 左偏树 or pb_ds
- bzoj 1455: 罗马游戏 左偏树入门
- 1455: 罗马游戏
- BZOJ 1455 罗马游戏
- BZOJ 1455 罗马游戏
- 1455: 罗马游戏
- bzoj 1455 罗马游戏
- [bzoj1455]罗马游戏 左偏树
- BZOJ1455 罗马游戏 【左偏树】
- BZOJ 1455: 罗马游戏 左偏树裸题
- bzoj1455:罗马游戏(左偏树)
- BZOJ 1455 罗马游戏 [右偏树(误)][左偏树]
- BZOJ 1455 罗马游戏 可并堆
- Docker 网络设计哲学
- Android中Canvas画图
- 华为oj 统计大写字母个数&&求最大连续bit数
- #define和typedef的区别
- zedboard学习记录
- 1455: 罗马游戏|左偏树
- 1024. Palindromic Number (25) 回文字符串
- 分享一套 python 试题
- linux下su和su-以及sudo的介绍
- vs2013编译 x264
- Python学习笔记-列表的条件过滤生成
- 第十五章编程练习(1)
- Quartz2D - 基本图形绘制(线条)
- android开发中是用Intent从一个activity跳向一个activity的问题