标签:常用 个人 加速 时间复杂度 最小生成树 www 内容 地址 范围
缓缓加速
第二日,生成树与LCA
从上至下知识点对应为:
1-3、最小生成树(MST),prim或kruskal算法
4、求多颗最小生成树(或许这么称呼不太严谨),kruskal算法
5、最大瓶颈生成树(MBST),prim或kruskal算法
6、LCA,树上倍增
7、最大生成树+LCA,树上倍增+Kruskal重构树
一些新内容,整理一下:
1、prim与kruscal算法
prim算法一般不常用,个人认为没有什么明显的性质。不过可能在某些暴力方法中有些用途。
Kruscal:设有n个节点,kruscal算法开始时可看作有n棵最小生成树,每加一条边减少一颗最小生成树(因为一条边会把两颗树合并为一颗最小生成树),如果题意要求把原图划分为k个代价最小的连通子图,那么这一利用这一个性质。没有证明。
如果稠密图kruscal超时(eloge)。可以考虑朴素的prim(n2)
2、瓶颈生成树
最大瓶颈生成树为树上边权最小值最大的树,最小瓶颈树为书上边权最大值最小的生成树。 最小生成树一定是最小瓶颈树。 最大生成树一定是最大瓶颈树(猜测)。 反之不成立。
3、树上倍增
利用倍增思想。求LCA时,其中关键为fa[x][i],表示节点x的第2^i的祖先。这样通过预处理fa,可以把单次朴素查询LCA的O(n)复杂度,优化到O(logN),N时数据范围的上限。 相关利用倍增思想的还有ST表,两者很相似。
4、kruscal重构树与瓶颈路径
两点间(x,y):
最小瓶颈路径:连通x、y两点所有路径的最大边权的最小值。
最大瓶颈路径:连通x、y两点所有路径的最小边权的最大值。
kruscal重构树:利用kruscal算法合并的一颗与生成树不用的树,其中要把边拆点,点权值为所拆边权值,按照并查集合并的树形加边。
重构最小生成树,那么LCA(x,y)的点权值为最小瓶颈路径。
重构最大生成树,那么LCA(x,y)的点权值为最大瓶颈路径。
瓶颈路径可以用floyd,但是时间复杂度为O(n的立方),显然超时。
学习参考地址https://www.cnblogs.com/ww3113306/p/9746449.html
标签:常用 个人 加速 时间复杂度 最小生成树 www 内容 地址 范围
原文地址:https://www.cnblogs.com/Flowyuan-Foreverworld/p/14957059.html