不会配对堆先%一下。
by Long·J·William @ 2017-06-08 20:56:37
不如左偏树。
by 易极feng @ 2017-07-19 18:27:45
你的看不懂额,来看看我的配对堆(滑稽)
```cpp
#include<cstdio>
#define N 100005
#include<algorithm>
#define For(i,j,k) for(int i=j;i<=k;i++)
#include<ext/pb_ds/priority_queue.hpp>
using namespace std;
using namespace __gnu_pbds;
int read(){
int l=1,x=0; char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') ch=getchar(),l=-1;
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return x*l;
}
__gnu_pbds::priority_queue<int> h[N];
int fa[N];
int find(int x){
if (fa[x]==x) return x;
fa[x]=find(fa[x]); return fa[x];
}
int main(){
int n,m,k,k0,fx,fy,x,y;
while(scanf("%d",&n)!=EOF){
For(i,1,n) h[i].push(read()),fa[i]=i;
m=read();
For(i,1,m){
x=read(),y=read();
fx=find(x); fy=find(y);
if (fx==fy) printf("-1\n");
else{
k=h[fx].top(); h[fx].pop(); k=k/2; h[fx].push(k);
k=h[fy].top(); h[fy].pop(); k=k/2; h[fy].push(k);
fa[fx]=fy; h[fy].join(h[fx]); printf("%d\n",h[fy].top());
}
}
For(i,1,n) h[i].clear();
}
return 0;
}
```
by wjy666 @ 2017-07-22 14:41:04
\_\_gnu\_pbds::priority\_queue<int> h[N]; 这一行默认配对堆,不用再定义
by wjy666 @ 2017-07-22 14:43:02
@[wjy666](/space/show?uid=20821) 月莫%%%吴主任
by Hany01 @ 2017-07-23 16:30:46