关于并查集
  • 板块学术版
  • 楼主D2T1xubiaoshi
  • 当前回复19
  • 已保存回复19
  • 发布时间2020/11/25 17:59
  • 上次更新2023/11/5 07:21:43
查看原帖
关于并查集
390770
D2T1xubiaoshi楼主2020/11/25 17:59

并查集代码分为3部分:

初始化,找父亲,合并

这是一份并查集的找父亲以及合并的代码:

int getf(int v){
    if(f[v] == v) return v;
    f[v]=getf(f[v]); 
    return f[v];
}

void merge(int v,int u){
    int t1,t2;
    t1=getf(v);
    t2=getf(u);
    if(t1 != t2) f[t2]=t1;
    return;
}

但是这个代码有一个问题:

只有在节点是另一个节点的父亲时,才会去更新它的父亲

所以,当生成一个长度为10的并查集,并执行以下代码时:

merge(1,2);
merge(3,4);
merge(1,3);

并查集是这样的:

1 1 1 3 4 5 6 7 8 9 10
2020/11/25 17:59
加载中...