hdu 1213 how many tables
并查集的简单应用,数组开了1010个,初始化却用到了set[1010];交了好几次,都是运行错误。
#include<iostream>
using namespace std;
int set[1020];
int find(int x)
{
int r= x;
while(set[r] != r)
r= set[r];
//int i =x;
/*while(i!= r)
{
int j =set[i];
set[i] = r;
i =j;
}*/
return r;
}
void merge(int a,int b)
{
a= find(a);
b= find(b);
/*if(a< b)*/
if(a!= b)
set[b] = a;
//else set[a] = b;
}
int main()
{
int a;
cin >> a;
while(a--)
{
int count =0;
for(int i =1;i<= 1010; i++)set[i] = i;
int b,c;
cin >> b>> c;
while(c--)
{
int x,y;
cin>> x>>y;
merge(x,y);
}
for(int i =1; i<=b;i++)
{
if(set[i] == i)
count++;
}
cout<< count<< endl;
}
return 0;
}

浙公网安备 33010602011771号