[算法] 可并堆
hyh集訓隊論文
左偏樹(小根堆):
int merge(int x, int y) {if(!x) return y;if(!y) return x;if(v[x]>v[y]) swap(x,y);rs[x]=merge(rs[x],y);if(dis[rs[x]>dis[ls[x]]]) swap(ls[x],rs[x]);if(!rs[x]) dis[x]=0;else dis[x]=dis[rs[x]]+1;return x; }int pop(int x) {int l=ls[x],r=rs[x];ls[x]=rs[x]=dis[x]=0;return merge(l,r); }//取堆頂直接訪問v[x]即可斜堆:
//需要先對結點編號?沒太懂int merge(int x, int y) {if(!x || !y) return x+y;if(v[x]>v[y]) swap(x,y);rs[x]=merge(rs[x],y);swap(ls[x],rs[x]);return x; }int pop(int x) {return merge(ls[x],rs[x]); }轉載于:https://www.cnblogs.com/HLXZZ/p/7639056.html
總結
- 上一篇: 《重构-改善既有代码设计》读书笔记-重构
- 下一篇: Uploadify v3.2.1