关于仙人掌树的学习(概念版)

仙人掌树其实没有看上去的那么高深

它,说白了只不过是一棵带环的树(这概念仅限在蒟蒻我的眼里,可能不太准确)。

当然环与环之间不能共边是仙人掌树的游戏规则

如果去掉所有的环,它就是普普通通的一棵树,可以进行任何我们想做的基本操作。

但正是由于它带环的性质,导致基本的操作无法正常进行。

那怎么办?

运用我们熟悉的等效替代法

什么意思?

——如果我们整体性地研究,并且把整个环当作一个点来处理不影响结果,那么我们可以直接把环当作一个点,这样带环的树就是一棵普通的树。

但是这样仙人掌树和普通树又有什么区别呢?

所以我们研究环内部分的时候就要多处理一些东西,保持环的性质,使得无论在外部合适内部看来,整棵树都是合法的。

与其说仙人掌树是一种算法。倒不如说它是处理一类问题的方式。因为解决问题的核心算法可能是LCA、平衡树、单调队列等等,仙人掌树的作用则是用了一种等效替代的思维方式在这些算法遇到带环树的困窘时,巧妙地把问题化繁为简,让解决问题的方式重新成为普普通通的操作。

关于仙人掌树的学习(概念版)

就比如上面的图片当中(号码乱编),2-4-5、7-8-9-10、13-14-15-16-17都是环,在处理整棵树的时候我们就可以把整个环的信息放在2、7、13的点上,信息可以是边的权值,环内直径,点的个数等等各种各样的信息。而如果我们要处理环内问题的时候,我们就要把环独立开来,把环作为主要研究对象来研究。

特别注意的是,打代码的时候,我们一般会通过开两倍数组的形式将环的操作变成线性操作。这仙人掌树中常用的技能。不理解这句话没关系,接下来的题目我们会慢慢感受到。

仙人掌树大概就是这么一件事情。下面我们来根据每道不同的题来进行研究吧。