您的位置:首页 > 其它

How Many Tables HDU - 1213 并查集

2018-02-09 22:43 507 查看
基础的并查集。

#include<stdio.h>
#include<string.h>
int f[1005],t,n,m,x,y;
void init()
{
for(int i=1;i<=n;i++)
f[i]=i;
return;
}
int getf(int v)
{
if(f[v]==v)
return v;
f[v]=getf(f[v]);
return f[v];
}
void merge(int x,int y)
{
int t1,t2;
t1=getf(x);
t2=getf(y);
if(t1!=t2)
f[t2]=f[t1];
return;
}
int main()
{
int ans;
scanf("%d",&t);
while(t--)
{
ans=0;
scanf("%d%d",&n,&m);
init();//注意一定要读取了n再去初始化。
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
merge(x,y);
}
for(int i=1;i<=n;i++)
if(f[i]==i) ans++;
printf("%d\n",ans);

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: