[左偏树]CODE[VS] 1063——合并果子
来源:互联网 发布:线切割锥度怎样编程 编辑:程序博客网 时间:2024/06/12 07:37
Ps:博主又来水blog辣
题目梗概
不需要了吧。
二叉哈夫曼树。
解题思路
直接上代码
今天复习堆QuQ,额、
于是很想码左偏树,发现竟然没有水左偏树的blog,所以来一发不要建议。
看到CODE[VS]有道合并果子++,数据大了100倍,那只能用单调序列了。
#include<cstdio>#include<algorithm>using namespace std;const int maxn=20005;struct jz{ int x,s,l,r;}a[maxn];inline int _read(){ int num=0;char ch=getchar(); while (ch<'0'||ch>'9') ch=getchar(); while (ch>='0'&&ch<='9') num=num*10+ch-48,ch=getchar(); return num;}int n,ro,til,ans;int merge(int x,int y){ if (x==0||y==0) return x|y; if (a[x].x>a[y].x) swap(x,y); a[x].r=merge(a[x].r,y); if (a[a[x].l].s<a[a[x].r].s) swap(a[x].l,a[x].r); a[x].s=a[a[x].l].s+a[a[x].r].s+1; return x;}void put(int x){ a[++til].x=x;a[til].s=1; a[til].l=a[til].r=0; ro=merge(ro,til);}int get(){ int x=ro; ro=merge(a[x].l,a[x].r); return a[x].x;}int main(){ n=_read(); for (int i=1;i<=n;i++) put(_read()); for (int i=1;i<n;i++){ int x=get(),y=get(); ans+=x+y;put(x+y); } printf("%d\n",ans); return 0;}
阅读全文
0 0
- [左偏树]CODE[VS] 1063——合并果子
- hunnuoj10163—合并果子
- [CodeVs 1063] 合并果子 ——小根堆
- 【贪心】CODE[VS] 1063 NOIP2004普及组-合并果子 (刷题记录(模拟+优先队列))
- WikiOI 1063 合并果子
- 【codevs 1063】合并果子
- CODEVS 1063合并果子
- codevs 1063 合并果子
- CODEVS 1063 合并果子
- Codevs 1063 合并果子
- 优先队列——合并果子
- Wiki OI 1063 合并果子
- wikioi 1063 合并果子模拟
- 1063合并果子【解题报告】
- 1063 合并果子 优先队列
- CodeVS 1063 合并果子 题解
- C++ STL第一次——果子合并(优先队列)
- 树-堆结构练习——合并果子之哈夫曼树
- 23种设计模式之——观察者模式
- 单元测试 方法讲解
- iOS终极横竖屏切换解决方案
- codeoforces832D
- 商城项目开发遇到的问题记录(一)
- [左偏树]CODE[VS] 1063——合并果子
- Scala简介
- Unity3d 技巧(12) -Unity3d发送邮件
- NSColorList—— an ordered list of NSColor objects, identified by keys.
- SQL优化之基于SQL特征的改写
- 轻量全面的硬件检测工具——Speccy中文版评测
- centos mysql 安装,启动命令
- 【bzoj2563】阿狸和桃子的游戏
- Qt连接并操作SQL数据库(Qt学习①)