您的位置:首页 > 理论基础 > 数据结构算法

hdu 1213 How Many Tables(数据结构)

2013-03-24 03:10 218 查看
跟1232不一样的地方是最后的结果不用减一。

#include<stdio.h>
int mark[1005],rank[1005];
int find(int x)
{
while(x!=mark[x])
x=mark[x];
return x;
}
void Union(int x,int y)
{
x=find(x);
y=find(y);

if(x==y)
return ;
if(rank[x]>=rank[y])
{
mark[y]=mark[x];
rank[x]+=rank[y];
}
else
{
mark[x]=mark[y];
rank[y]+=rank[x];
}
return ;
}
int main()
{
int x,y;
int T,i;
int n,m;
int ans;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(i=0;i<=n;i++)
{
mark[i]=i;
rank[i]=1;
}

for(i=0;i<m;i++)
{
scanf("%d%d",&x,&y);
Union(x,y);
}

ans=0;
for(i=1;i<=n;i++)
{
if(mark[i]==i)
ans++;
}
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: