可并堆
简介:
可并堆主要用于进行快速合并堆的操作,其主要操作有merge(合并)操作,删除操作。而删除操作也是依赖于合并操作,试想要删除节点k,则只需合并k节点的左右节点,即为删除操作,进行合并堆的操作的时间复杂度为:o(logm+logn)(m,n分别指代所需合并两堆的叶子节点数目)。
合并操作的板子:
点击查看代码
void merge(int x,int y)
{
if(!x||!y)return x+y;
if(v[x]>v[y])//维护小根堆
swap(x,y);
r[x]=merge(r[x],y);//r[x]表示x的右子节点
if(dis[l[x]]>dis[r[x]])
swap(l[x],r[x])//维护左偏性质
dis[x]=dis[r[x]]+1;//左偏树性质
return x;
}

浙公网安备 33010602011771号