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即可,代表下次查询应该指向的值