可并堆真的很好写!可并堆真的很好写!可并堆真的很好写! 只有一个合并操作,插入都是用合并实现的,最多再来一个并查集,真的简单到爆好吗。。 代码:
#include#define ll long longusing namespace std;const int maxn=200001;struct Heap{ int ls,rs,fa,key,dist;}h[maxn];int merge(int u,int v){ if(!u||!v)return u+v; if(h[u].key>h[v].key||(h[u].key==h[v].key&&u>v))swap(u,v); int &ul=h[u].ls; int &ur=h[u].rs; ur=merge(ur,v); h[ur].fa=u; if(h[ul].dist