关于树的简单整理
2017-10-27 11:16
162 查看
整理一些树的,基本的,简单的一些知识。
先写一下关于树的许多定义。
树,父节点、子节点、子树、祖先、兄弟、根节点、叶节点、直径、路径、重心、直径、最近公共祖先、生成树、dfs序,树形dp等
1、最近公共祖先
一般用倍增求LCA(Least Common Ancestors)。
按照朴素的做法,就是深的点跳到同一高度,然后两个点一齐往上跳。跳到同一位置。
这样其实不慢,一般的树,深度为logn,所以这个复杂度可以是logn。但如果树成了一条链,那么复杂度就是O(n)。
而倍增求LCA,和这个思想是一样的,深的点跳到同一高度,然后两个点一齐往上跳。不过它不是一个点一个点的跳,看下面。
对于任何的数字都可以分解成2的次幂相加的形式(7 = 22+21+20,10 = 23+21...),证明也很简单,任何一个十进制都可以分解成二进制表示。
那么对于跳的任何高度都可以用二进制表示(跳7个,7 = 22+21+20,跳10个10 = 23+21),那么我们预处理出每个点往上跳2的次幂的点,所到达的点是谁就好了。
然后和上面一样跳。
这样明显比上面的快。
贴一下代码 luogu3379
void dfs(int u,int fa) { deth[u] = deth[fa]+1; q[++tot] = u; L[u] = tot; for (int i=head[u]; i; i=e[i].nxt) { int v = e[i].to; if (v==fa) continue; dfs(v,u); } R[u] = tot; }View Code
总结
这是一篇入门基础级的,没有更多的叙述。(以后再加以补充吧)
树的问题还有很多,这些都是关于基础的一些问题,更多的,感兴趣可以深入的研究;
谢谢观看
相关文章推荐
- 关于Segmentation fault (core dumped)几个简单问题的整理
- Xman整理篇___关于Python的基础内容(变量和简单数据类型)
- 关于ActiveMQ的简单整理(3)
- 关于Segmentation fault (core dumped)几个简单问题的整理
- 关于Instruments - Leak的简单使用整理
- 关于无线网络的简单整理
- 关于数据结构方面内容的简单回顾整理
- 关于LittleSis网站数据API的简单整理
- 关于hash表(散列表)的简单整理
- 关于素数的简单算法整理
- 关于数字证书理解的简单整理以及12306网站证书简单分析
- 关于Segmentation fault (core dumped)几个简单问题的整理
- 关于ActiveMQ的简单整理(2)
- 关于ActiveMQ的简单整理(4)
- 关于整理工作中用到的链表和哈希表的简单操作
- 关于ActiveMQ的简单整理(6)
- 关于Segmentation fault (core dumped)几个简单问题的整理
- 关于Segmentation fault (core dumped)几个简单问题的整理
- 关于AndroidStudio混淆配置,简单的整理
- 关于随机数的一个简单的整理