如果多加一个操作的话,该怎么做?
查看原帖
如果多加一个操作的话,该怎么做?
148443
漠视楼主2022/10/9 14:53

原题给的是合并和查询两个操作,如果再加入一个转移的操作呢?就是给定i,j和k,使i与j之间的所有结点(包括i和j)移动到k所属舰队的尾部。

用并查集进行路径压缩后会使一系列的结点直接指向祖先节点,丢失了原本的父亲结点,丧失了结点之间的连续,该怎么做?

这个想法源自于codeforces最近的一个题目:这个

我的思路是每次取最深的结点,将该节点的深度变成原来的一半。假设根节点的深度为1,最深结点的深度为n,就将(n+1)/2 + 1深度的祖先结点连到根节点上,然后重复k次。

用并查集维护深度,堆来取最深的结点,倍增来找祖先节点,想了想这个思路,不仅麻烦,还是错的。并查集能维护深度,但是不能实现同时改变多个连续点的深度这个操作,就看了codeforces的题解,发现有简单的做法。当时以为自己把并查集忘记了,人都要傻了。

​ 那这道题加一个转移的操作应该怎么做?

2022/10/9 14:53
加载中...