这个东西在pb_ds中用过。但不知道是什么。然后刚好这几天有空就看了一下。发现其实
很简单。
他事实上就只是维护了一颗树而已。
我们假设现在有 N 个节点,每个节点都带有权值。我们要维护这些节点的一个堆。
假设我们要维护一个小根堆。
对于每个节点
对于这颗树而言,我们保证每个节点的儿子的权值都要大于等于这个节点的权值。
那么最后这颗树的根,设为 Root ,就是权值最小的点。
接下来考虑堆的几个基本操作。
1. Merge(u,v)
表示我们要把u,v这两个堆合并起来,接着返回这个新堆的根。
那么很显然的,我们只需要比较一下 Rootu 的权值和 Rootv 的权值,设权值大的是 y ,另外一个是