关于并查集的三种优化

声明:三种方法几乎没法同时优化,特定题目要求保留树结构,无法使用路径压缩。
1.路径压缩o(1)复杂度
只需要查根的时候直接指向根
int root (int x)
{
    return fa[x]=fa[x]==x?x:root(fa[x]);
}
2.按秩合并(深度)
初始化都为一
int d[N];
for()
rnk[i]=1;
merge操作中,
if(rnk[x]>rnk[y])swap(x,y);
pre[x]=y;
if(rnk[x]==rnk[y])rnk++;
3.启发式合并(大小)
初始化同上;
if(sz[x]>sz[y])
swap(x,y);
pre[x]=y;
sz[y]+=sz[x];
全部评论

相关推荐

门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 12:30
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务