题目链接:http://poj.org/problem?id=1611
思路:
显然是一个并查集的题,很简单,只要将一个group中的学生并在一起,最后遍历1到n-1,看有多少学生的祖先与0的祖先相等即可。
代码如下:
1 #include2 using namespace std; 3 4 int n,m,res,root[30005]; 5 6 int getr(int k){ 7 if(root[k]==k) return k; 8 else return root[k]=getr(root[k]); 9 }10 11 int main(){12 while(~scanf("%d%d",&n,&m),n){13 res=1;14 for(int i=0;i 0){19 scanf("%d",&tmp1);20 num--;21 while(num--){22 scanf("%d",&tmp2);23 root[getr(tmp2)]=getr(tmp1);24 }25 }26 }27 int tmp=getr(0);28 for(int i=1;i