您的位置:首页 > 其它

并查集模板

2017-12-27 15:25 141 查看
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1232

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <math.h>
#include <ctype.h>
#include <map>
#include <set>
#include <vector>
#include <queue>
#define inf 0x3f3f3f3f
#define eps 1e-8
typedef long long ll;
using namespace std;
int f[1000],n,m;
void init()
{
for(int i=1; i<=n; i++)
{
f[i]=i;
}
}
int getf(int v)
{
return v==f[v]?v:(f[v]=getf(f[v]));
}
void Merge(int n,int v)
{
int t1=getf(n);
int t2=getf(v);
if(t1!=t2)
{
f[t2]=t1;
}
}
int main()
{
while(~scanf("%d%d",&n,&m),n)
{
int a,b;
init();
for(int i=1; i<=m; i++)
{
scanf("%d%d",&a,&b);
Merge(a,b);
}
int ans=0;
for(int i=1; i<=n; i++)
{
if(f[i]==i) ans++;
}
printf("%d\n",ans-1);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: