POJ-1611 纯并查集

来源:互联网 发布:淘宝商城如何申请 编辑:程序博客网 时间:2024/06/06 15:04

用continue语句会超时,所以以后少用这种破坏程序结构的控制语句吧。。。

P.S. 明天的省队选拔我去打酱油。

/* * the suspects * mike-w * 2012-4-27 */#include<stdio.h>#include<stdlib.h>#include<string.h>#define SET_SIZE 33333int set[SET_SIZE],rank[SET_SIZE],card[SET_SIZE];int N,M;int set_init(int size){int i;for(i=0;i<size;i++)set[i]=i,rank[i]=1,card[i]=1;return 0;}int set_find(int e){if(set[e]==e)return e;elsereturn set[e]=set_find(set[e]);}int set_merge(int e1, int e2){int r1=set_find(e1);int r2=set_find(e2);if(r1==r2)return -1;if(rank[r1]<rank[r2])set[r1]=r2,rank[r1]=r2,card[r2]+=card[r1];else if(rank[r1]>rank[r2])set[r2]=r1,rank[r2]=r1,card[r1]+=card[r2];elseset[r1]=r2,rank[r2]++,card[r2]+=card[r1];return 0;}int main(void){#ifndef ONLINE_JUDGEfreopen("in","r",stdin);#endifint i,k,t1,t2;while(scanf("%d%d",&N,&M),N||M){set_init(N);while(M-->0){scanf("%d",&k);if(k)scanf("%d",&t1);for(i=2;i<=k;i++)scanf("%d",&t2),set_merge(t1,t2);}printf("%d\n",card[set_find(0)]);}return 0;}