用dfs序维护树结构
来源:互联网 发布:淘宝聚划算怎么抢最快 编辑:程序博客网 时间:2024/05/16 17:26
给定一棵n个节点的树,m次查询,每次查询需要求出某个节点深度为h的所有子节点。
对于这个问题如果试图去对每个节点保存所有深度的子节点,在数据大的时候内存会吃不消;或者每次查询的时候去遍历一遍,当数据大的时候,时间效率会非常低。
此时如果使用dfs序维护树结构就可以轻松地解决这个问题。
作为预处理,首先将将树的所有节点按深度保存起来,每个深度的所有节点用一个线性结构保存,每个深度的节点相对顺序要和前序遍历一致。
然后从树的根节点进行dfs,对于每个节点记录两个信息,一个是dfs进入该节点的时间戳in[id],另一个是dfs离开该节点的时间戳out[id]。
最后对于每次查询,求节点v在深度h的所有子节点,只需将深度为h并且dfs进入时间戳在in[v]和out[v]之间的所有节点都求出来即可,由于对于每个深度的所有节点,相对顺序和前序遍历的顺序以致,那么他们的dfs进入时间戳也是递增的,于是可以通过二分搜索求解。
0 0
- 用dfs序维护树结构
- 用dfs序维护树结构
- splay 动态维护dfs序
- BZOJ 3779 重组病毒 LCT+线段树维护DFS序
- HDU.5692 Snacks ( DFS序 线段树维护最大值 )
- 主席树维护dfs序——BZOJ3653/Luogu3899 谈笑风生
- [主席树维护HASH && SET维护DFS序] Codechef. Walks on the binary tree
- Bzoj3786星系探索:splay维护dfs序
- BZOJ3786: 星系探索 splay维护dfs序
- BZOJ 3729 splay维护DFS序+博弈论
- BZOJ 3991 set维护dfs序
- 【线段树+dfs序 模板】hdu 5692 ,百毒之星A 题目 snacks dfs 序 +线段树维护最大值
- zoj 3686 A Simple Tree Problem (经典,利用dfs序维护树)
- cf-edu#6-E - New Year Tree -dfs序+线段树维护
- HDU-3974-Assign the task(线段树维护dfs序)
- 51Nod 1199 Money out of Thin Air(dfs序+线段树维护区间和)
- xloadtree+DWR 生成和维护树结构
- 【bzoj 1103】[POI2007]大都市meg 树状数组维护dfs序
- c++多态机制详细分析以及c++内存对象布局
- Servlet详解
- iOS开发-Day24-OC KVC&KVO&通知
- CLGeocode编码类的讲解
- 字典树
- 用dfs序维护树结构
- 字符串中空格换成%20
- 2367 Genealogical tree
- hdu-5023 A Corrupt Mayor's Performance Art (线段树区间修改)
- 扩展欧几里德算法详解(转)
- 最励志语句!——冲向阿里,反正光脚的不怕穿鞋的
- LCS(最长公共子序列) GST(最长公共子串,广义后缀树)
- 如何在tomcat安装部署php项目
- python菜鸟日记7