P8686. 修改数组
考点
- 并查集
题解
1 |
|
思路
并查集在搜索上的妙用
考虑以下例子:
初始状态下,数组为空;分别输入
2
、1
,数组变成{2, 1}
再输入
1
,你会希望数组内的1
元素指向3
,这样就不必暴力地轮询加1如果输入
2
呢?你也希望数组内的2
元素指向3
塞入
3
后,数组变成{2, 1, 3}
再输入
1
,你希望数组内的1
元素指向4
如果输入
2
呢?你希望数组内的2
元素指向4
如果输入
3
呢?你还是希望数组内的3
元素指向4
塞入
4
后,数组变成{2, 1, 3, 4}
再输入
1
,你希望数组内的1
元素指向5
如果输入
2
呢?你希望数组内的2
元素指向5
如果输入
3
呢?你希望数组内的3
元素指向5
如果输入
4
呢?你还是希望数组内的4
元素指向5
塞入
4
后,数组变成{2, 1, 3, 4, 5}
发现了吗,每次查询的时候,我们都会希望原数组是个经过路径压缩后的并查集

所以每次查询完结点的祖先后,令祖先的祖先为祖先 + 1
即可,代表下次查询应该指向的值