并查集模板
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;
}
以上是关于并查集模板的主要内容,如果未能解决你的问题,请参考以下文章
带权并查集(含种类并查集)经典模板 例题:①POJ 1182 食物链(经典)②HDU - 1829 A bug's life(简单) ③hihoCoder 1515 : 分数调查(示例代码(代