🐵指尖猴全新升级
第14课:路径压缩
🚀

路径压缩

一次深爬,终身直达!

📖知识引入

😰长链问题
集合 unlucky 连成一条长链,find要一步一步爬,越爬越慢
🚀路径压缩
找根的途中,把沿途节点全部直接挂到根上,一步到位
📉效果惊人
树被压得又扁又平,之后的查询几乎一步就到根
🔁一行写法
return fa[x] = find(fa[x]),递归一行完成压缩
💡
路径压缩只改find函数一行,代价几乎为零,信奥实战必带

🔍带路径压缩的find

int find(int x) {
    if (fa[x] == x) return x;
    return fa[x] = find(fa[x]);  // 边找根边把 x 挂到根上
}

// 压缩前:1 ← 2 ← 3 ← 4,找 4 的根要爬 3 步
// 压缩后:2、3、4 都直接挂在 1 下面,再查只走 1 步

递归找根的同时把沿途节点都挂到根上,下次查询直达。

🎯小测验

第1题:路径压缩发生在哪个操作里?

第2题:路径压缩后并查集的树变得更?

第3题:一行递归压缩的标准写法是?

📝本课知识点

  • ✓压缩=沿途挂到根
  • ✓一行代码搞定
  • ✓查询几乎O(1)
第14课完成!继续探索下一课吧 🚀