算法与数据结构八日谈之四——树论

1.树的定义

父节点、子节点、子树、祖先、后代、兄弟、根节点、叶节点、路径等

2.生成树

生成树的计数

Matrix-Tree定理

最小(大)生成树

-Prim算法
-Kruskal算法
部分维护动态图的题目可通过离线处理转化为维护最小生成树

3.树的重心

定义(性质)1:到树上所有点的距离和最小的点
定义(性质)2:割掉该点后最大的子树大小最小的点

-可通过递归处理树的重心来完成动态树分治
加权重心与平权重心求法类似

4.树的直径

顾名思义,树上最长的路径
简单的求法:先从一点求出最远点,再以该点求出其最远点,则这两点之间的路径为一条直径

树的中心

树的中心为直径的中点(不一定在某个节点上,也可能在某条边上,如果在某条边上,则所有直径经过该边)

5.最近公共祖先

基于倍增的lca算法,分别求出每个点的 2i 祖先, O(n) 时间可以求出 2i+1 祖先。

利用lca求出树上两点距离

分别求出每个点到根的距离,则两点距离为改距离和减去两倍lca到根的距离。

6.树的计数

由Matrix-Tree原理得: n

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值