1. 程式人生 > >1611 並查集模板+簡單計數

1611 並查集模板+簡單計數

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=30003;
int fa[N];
 
void Make_set(int n)
{
	for(int i=0;i<n;i++)
		fa[i]=i;
}
 
int find_set(int x)
{
	if(x!=fa[x])
		fa[x]=find_set(fa[x]);
	return fa[x];
}
 
void Union_set(int x,int y)
{
	int xr=find_set(x);
	int yr=find_set(y);
	if(xr!=yr)
		fa[yr]=xr;
}
 
 
int main ()
{
	int n,m;
	while(~scanf("%d%d",&n,&m)&&(n+m)!=0)
	{
		Make_set(n);
		int ans=0;
		int k,a,b;
		for(int i=0;i<m;i++)
		{
			scanf("%d%d",&k,&a);
			for(int j=1;j<k;j++)
			{
				scanf("%d",&b);
				Union_set(a,b);
			}
		}
		for(int i=0;i<n;i++)
		{
			if(find_set(0)==find_set(i))
				ans++;
		}	
		printf("%d\n",ans);
	}
	return 0;  
}