码迷,mamicode.com
首页 > 其他好文 > 详细

kruskal重构树

时间:2019-09-10 23:22:20      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:使用   不难   预处理   kruskal算法   实践   https   目标   简介   根据   

简介

kruskal重构树是对kruskal算法的拓展,可以看为一种特殊的数据结构。

实践中可以解决一系列涉及可达点的问题。(这话讲了估计也看不懂)


实现思路

在kruskal算法的流程中,当我们将两个点连接在一起时,不进行直接的连接,而是新建一个节点,然后分别连上。

我们将这个节点的点权设为原先两个点之间的边权,最后可以形成一颗树。

不难发现,这样的树满足一些性质:

  1. 两点之间路径边权的最大值是他们的lca的权值。

  2. 树中的叶子节点是原树中的节点,而非叶节点是新增的节点。

  3. 由于是根据kruskal算法的顺序建树,所以非叶节点点权具有单调性。

考虑下面这道题作为应用的例子:

Peaks

这里只给出如何用kruskal重构树解决边权限制。

首先建出kruskal重构树,然后dfs预处理每个节点能到达的节点范围。

每一次询问的时候我们都从给定的叶节点开始倍增向上跳,直到不满足题意。

找到了目标非叶节点之后主席树查询即可。

总结来说:如果题目涉及对边权的限制,那么可以考虑使用kruskal重构树进行快速求解。不过需要注意的是,不是所有对边权有限制的题目都能用该算法解决。


例题

Peaks

归程「NOI2018」

kruskal重构树

标签:使用   不难   预处理   kruskal算法   实践   https   目标   简介   根据   

原文地址:https://www.cnblogs.com/ilverene/p/11503588.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!