The Suspects
并查集
Question
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| #include<stdio.h>
int par[30010];
int find(int x) { if(x==par[x]) return x; return par[x]=find(par[x]); }
void WeightUnion(int x,int y) { int ix=find(x); int iy=find(y); if(ix<iy) par[iy]=ix; else par[ix]=iy; }
int main() { int N,M; while(scanf("%d %d",&N,&M)!=EOF) { if(N==0&&M==0) break; for(int i=0;i<N;++i) par[i]=i; while(M--) { int k; scanf("%d",&k); int first,other; scanf("%d",&first); for(int i=0;i<k-1;++i) { scanf("%d",&other); WeightUnion(first,other); } } int ans=1; for(int i=1;i<N;++i) { if(find(0)==find(i)) ans++; } printf("%d\n",ans); } return 0; }
|