1611 並查集模板+簡單計數
阿新 • • 發佈:2018-12-15
#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; }