HDU-1213-Ignatius' birthday
#include<iostream>
using namespace std;
int dad[1002];//数组的值代表爸爸是几号。
int find(int x)
{
if (x == dad[x])//如果自己是爸爸,就返回自己
{
return x;
}
dad[x] = find(dad[x]);//如果不是,就找自己的爸爸,然后让自己的爸爸代表自己,这是一个递归过程
return dad[x];
}
void join(int a,int b)
{
dad[a] = b;
}
int main()
{
int u;
cin >> u;
while(u--)
{
int n, m, sum = 0;
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
dad[i] = i;//一开始,爸爸都是自己
}
for (int i = 0; i < m; i++)
{
int x, y;
cin >> x >> y;
x = find(x);//呼叫出各自的爸爸
y = find(y);//呼叫爸爸
if (x!=y)//爸爸不同,就结盟。
{
join(x, y);
}
}
for (int i = 1; i <= n; i++)
{
if (i == dad[i])
sum++;
}
cout << sum << endl;
}
}