我会说之前的方法哪儿错了我还不知道嘛== 链接
模板大法好==
#include <iostream>
#include<cstdio>
using namespace std;
const int MAXN = 1000100;
struct DS
{
int f[MAXN];
void init(int n)
{
for(int i=0;i<n;i++)
f[i]=i;
}
int ff(int x) ///int father (a);
{
///查找父亲并压缩路径
if(f[x]!=x)
f[x]=ff(f[x]);
return f[x];
}
void join(int a,int b) ///void union (a, b);
{
f[ff(a)]=f[ff(b)];
}
int find(int a,int b)
{
return ff(a)==ff(b);
}
}soul;
int main()
{
// freopen("cin.txt","r",stdin);
int n,m,a,b,c,t,num[100000];
while(cin>>n>>m)
///n:人数 m:操作数
{
if(m==0&&n==0) break;
soul.init(n);
while(m--)
{
cin>>t;
for(int i=1;i<=t;i++) cin>>num[i];
for(int i=1;i<t;i++)
soul.join(num[i],num[i+1]);
}
int q=soul.ff(0);
int count=1;
for(int i=1;i<n;i++)
if(q==soul.ff(i)) count++;
cout<<count<<endl;
}
return 0;
}