#include <iostream>
#include <cstring>
using namespace std;
int parent[30005];
int getroot(int a)
{
if(parent[a] != a)
{
parent[a] = getroot(parent[a]);
}
return parent[a];
}
bool query(int a, int b)
{
return getroot(a) == getroot(b);
}
void merge(int a, int b)
{
int fa = getroot(a);
int fb = getroot(b); //在GetRoot 和 Merge中维护必要的信息
if(fa != fb)
{
parent[fb] = fa; //total[p1] += total[p2];
}
return;
}
void init(int n)
{
for (int i = 0; i < n; i++)
{
parent[i] = i;
}
}
int main()
{
int n, m;
while(cin >> n >> m && (m + n))
{
init(n);
for (int t = 0; t < m; t++)
{
int k;
cin >> k;
int a1;
cin >> a1;
for (int i = 0; i < k - 1; i++)
{
int b;
cin >> b;
merge(a1, b);
}
}
int ans = 0;
for (int i = 0; i < n; i++)
{
if(query(0, i))
ans++;
}
cout << ans << endl;
}
}
poj the suspects
最新推荐文章于 2020-06-19 11:10:55 发布