```
struct heap{
void add(int x,int y){nxt[++id]=headd[x],headd[x]=id,to[id]=y,fa[y]=x;}
bool empty(){return !size;}
void push(int u,int x)
{
val[u]=x; size++;
if(size==1) root=u;
else merge(root,u);
}
int merge(int x,int y)
{
if(!x||!y) return x+y;
if(val[x]<val[y]) swap(x,y);
add(x,y);
return x;
}
void pop()
{
int t; size--;
for(register int i=headd[root];i;i=nxt[i]){
if(fa[to[i]]==root) dui.push(to[i]),fa[to[i]]=0;
while(dui.size()>1){
t=dui.front(); dui.pop();
dui.push(merge(dui.front(),t));
dui.pop();
}
if(dui.size()) root=dui.front(),dui.pop();
else root=0;
}
}
void modify(int u,int x)
{
val[u]=x;
if(u==root) return ;
fa[u]=0;
root=merge(u,root);
}
int top(){return root;}
};
```
by Doubleen @ 2019-01-22 22:13:59
~~我发了4个可并堆的提问都没人,您配对堆就别这样了吧~~
by 樱初音斗橡皮 @ 2019-01-22 22:32:45
@[杨亦诚斗橡皮](/space/show?uid=66287) 左偏树?
by NaCly_Fish @ 2019-01-22 22:35:13
@[NaCly_Fish](/space/show?uid=115864) 恩我是
by 樱初音斗橡皮 @ 2019-01-22 22:37:22
https://www.luogu.org/discuss/show/95252 帮看看我的左偏树
by 樱初音斗橡皮 @ 2019-01-22 22:38:06
@[Doubleen](/space/show?uid=56432) 您取top是要取下标还是取值...以及modify操作不是要判断新值是否大于旧值吗?~~另外我的配对堆modify修了半个月没修好,可能还要大佬帮我看看~~
by 小菜鸟 @ 2019-01-22 22:52:38
巧了我的配对堆也只过了1 3两个点
by 小菜鸟 @ 2019-01-22 23:01:00