一道水题,运用并查集,每2个人认识,就放到一个集合里。最后统计集合的个数。
#include <iostream>
#include <set>
using namespace std;
int cdata[10000];
int k_find(int i)
{
if (cdata[i] == i)
return i;
else
return cdata[i] = k_find(cdata[i]);
}
void he_bing(int a, int b)
{
int k1 = k_find(a);
int k2 = k_find(b);
if (k1 != k2)
cdata[k2] = k1;
}
int main()
{
int i;
cin >> i;
while (i--)
{
int s;
int a, b;
int n, m;
int isum = 0;
cin >> n >> m;
for (s = 1; s <= n; s++)
{
cdata[s] = s;
}
for (s = 1; s <= m; s++)
{
cin >> a >> b;
he_bing(a,b);
}
for (s = 1; s <= n; s++)
{
if (cdata[s] == s)
isum++;
}
cout << isum << endl;
}
}