您的位置:首页 > 其它

ACM_HDU 1213 How Many Tables(基础并查集)

2017-03-26 21:30 393 查看
#include<iostream>
#define NN 1000
int ranka[NN];
using namespace std;
struct node
{
int pre;
}p[NN];
void Init(int n)
{
for(int i=1;i<=n;i++)
{
p[i].pre=i;
ranka[i]=1;
}
}
int find(int x)
{
return x == p[x].pre ? x : find(p[x].pre);
}
void join(int x,int y)
{
x=find(x);
y=find(y);
if(x==y)return;
if(ranka[x]>=ranka[y])
{
p[y].pre=x;
ranka[x]=ranka[x]+ranka[y];
}else
{
p[x].pre=y;
ranka[y]=ranka[y]+ranka[x];
}
}
int main(void)
{
int t,M,N,num,a,b,number;
cin>>num;
for(int i = 0;i < num;i++)
{
cin>>N>>M;
Init(N);
for(int j = 0;j < M;j++)
{
cin>>a>>b;
join(a,b);
}
number = 0;
for(int m = 1;m <= N;m++)
{
if(p[m].pre==m)   //数根节点的个数的办法。
number++;
}
cout<<number<<endl;
}

return 0;
}
rank仿佛是标准库的一个自留词,不能用这个名字。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: