poj 1611 简单并查集的应用

#include<stdio.h>
#define N 31000
int pre[N];
int find(int x) {
if(x!=pre[x])
    pre[x]=find(pre[x]);
return pre[x];
}
int main() {
  int n,m,i,k,s,t;
  while(scanf("%d%d",&n,&m),n||m){
    for(i=0;i<=n;i++)
        pre[i]=i;
    while(m--) {
        scanf("%d",&s);
        s--;
        scanf("%d",&t);
        while(s--) {
            scanf("%d",&i);
            pre[find(i)]=find(t);
        }
    }
    k=0;
    for(i=0;i<n;i++)
        if(find(i)==find(0))
        k++;
    printf("%d\n",k);
  }
return 0;
}
posted @ 2014-06-27 17:10  HYDhyd  阅读(102)  评论(0编辑  收藏  举报