#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 30000 + 10;
int fa[MAXN], rank[MAXN];
void init(int n)
{
rank[0] = 1;
for (int i = 1; i < n; ++i)
{
fa[i] = i;
rank[i] = 0;
}
}
int find(int x)
{
return fa[x] == x ? x : fa[x] = find(fa[x]);
}
void unionset(int x, int y)
{
int a = find(x);
int b = find(y);
if (a != b)
{
if (a == 0)
{
fa[b] = a;
rank[a]++;
}
else if (b == 0)
{
fa[a] = b;
rank[b]++;
}
else if (rank[a] > rank[b])
{
fa[b] = a;
rank[a]++;
}
else
{
fa[a] = b;
rank[b]++;
}
}
}
int slove(int n)
{
int res = 0;
//printf("=============\n");
for (int i = 0; i < n; ++i)
{
if (find(i) == 0)
{
// printf("%d ", i);
res++;
}
}
//printf("\n=============\n");
return res;
}
int main()
{
int m, n, k, a, b;
while (scanf("%d%d", &n, &m) == 2 && (m || n))
{
init(n);
for (int i = 0; i < m; ++i)
{
scanf("%d", &k);
for (int j = 0; j < k; ++j)
{
if (j == 0)
{
scanf("%d", &a);
}
else
{
scanf("%d", &b);
unionset(a, b);
}
}
}
printf("%d\n", slove(n));
}
//getchar();
//getchar();
return 0;
}
The Suspects POJ - 1611
最新推荐文章于 2021-09-01 17:47:32 发布