并查集模板

Posted noifish

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并查集模板相关的知识,希望对你有一定的参考价值。

//这么简单的东西我就不废话了,具体看代码<br data-filtered="filtered">#include<iostream>

#include<queue>
#include<cstdio>
using namespace std;
 
int n,m,fa[110],ans;//fa数组记录fa【i】的根;
 
struct str{
 
    int x,y,s; //x——起点,y——终点,s——权值;
 
}u[110];
 
int find(int x){ //寻找根;
 
    if(fa(x)==x) return x;
 
    else return fa(x)=find(fa(x));
 
}
 
bool cmp(str x,str y){ //结构体排序 ;
 
    return x.s<y.s;
 
}
 
int main(){
 
    scanf("%d%m",&n,&m);
 
    for(int i=1;i<=m;i++){
 
    scanf("%d%d%d",&u[i].x,&u[i].y,&u[i].s);
 
    }
 
    for(int i=1;i<=n;i++) fa[i]=i; //初始化根 ;
 
    sort(u+1,u+m+1,cmp);
 
    q=1;
 
    for(int i=1;i<=m;i++){
 
    int fx=find(u[i].x); //寻找起点的根 ;
 
    int fy=find(u[i].y); //寻找终点的根;
 
    if(fx!=fy){ //如果不是同一个根,将两个不同的集合合并,(将fx的根付给fy也行)如:
 
    fa[fx]=fy; //fa【fy】=fx;
 
    ans+=u[i].s; //加上权值
 
    q++; //记录链接的边
 
    }
 
    if(q==n) break;
 
    }
 
    printf("%d",ans);
 
    return 0;
 
}

以上是关于并查集模板的主要内容,如果未能解决你的问题,请参考以下文章

Tarjan 模板,高级并查集

并查集题目模板及java代码

并查集模板(洛谷——模板并查集)

并查集模板

带权并查集(含种类并查集)经典模板 例题:①POJ 1182 食物链(经典)②HDU - 1829 A bug's life(简单) ③hihoCoder 1515 : 分数调查(示例代码(代

ybtoj并查集例题1模板并查集