【理解】线段树中树链存储方式
来源:互联网 发布:maxwell软件价格 编辑:程序博客网 时间:2024/05/18 01:04
线段树中树链存储方式
回想建树方式:(从dfs_2开始)
void dfs_2(int x,int tt){ top[x]=tt; po[x]=++cnt; id[po[x]]=x; if(son[x]!=0)dfs_2(son[x],pre); //这一步使重链成为连续区间; for(int i=fst[x];i;i=use[x].next) if(use[x].to!=fa[x]&&use[x].to!=son[x]) dfs_2(use[x].to,use[x].to);}
我们用po[MAXN]:节点i在线段树中编号;
id[MAXN]:线段树中标号为i的节点对应树链中节点编号;、
(PS:建完树后pre[ ]数组便完成了任务)
void build(int k,int l,int r) { a[k].l=l;a[k].r=r; if (l==r) {a[k].sum=a[k].max=data[pre[l]];return;} int mid=(l+r)>>1; build(k<<1,l,mid);build((k<<1)+1,mid+1,r); up(x,l,r);}
从dfs_2可看出:重链的节点在线段树中是一段连续的区间的!
所以当点是重链上点时可以直接统计该点 x 到其 top[x] 间的数据;
若该点 x 为轻边中的点时,其 top[x] == x,只可以统计一个点;
并且这时只可以跳一下,用 fa[x] 跳到其父亲节点,继续判断;
0 0
- 【理解】线段树中树链存储方式
- 深入理解文件存储方式
- java类型存储方式理解
- android几种存储方式理解心得,
- 理解引用类型变量的存储方式
- 关于不同数据类型存储方式的的理解
- 利用 db2dart 工具来理解 DB2 数据存储方式
- Linux文件系统十问---深入理解文件存储方式
- memcached实战系列(六)理解Memcached的数据存储方式
- 理解Unity法线贴图的切线空间存储方式
- [深入理解PHP] -- PHP变量在内存中的存储方式
- 字符集、字符编码与存储方式的理解
- C的二维数组理解指针以及存储的方式
- 深入理解计算机系统-之-数值存储(四)--整数在内存中的存储方式
- 深入理解计算机系统-之-数值存储(五)--浮点数在内存中的存储方式
- 存储理解
- 理解存储
- 存储方式
- simditor 图片上传成功后修改图片地址
- 制作framework库文件的详细步骤---iOS9,Xcode7.2
- css中长度尺寸的一些总结
- 基于zhphpWeixinApi.class.php开发微信+ 百度API翻译案例
- CDZSC_2016寒假个人赛(2)-C
- 【理解】线段树中树链存储方式
- ZOJ1027
- redis 安装及配置 mongo
- Objective C类方法load和initialize的区别
- 个人算法练习库-go语言版
- 线程池
- 操作csv文件
- center与centering之间的区别
- mysql基础使用