poj1611(并查集简单应用)

Posted frankchen831x

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj1611(并查集简单应用)相关的知识,希望对你有一定的参考价值。

题目链接:http://poj.org/problem?id=1611

思路:

显然是一个并查集的题,很简单,只要将一个group中的学生并在一起,最后遍历1到n-1,看有多少学生的祖先与0的祖先相等即可。

代码如下:

 1 #include<cstdio>
 2 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<n;++i) root[i]=i;
15         while(m--){
16             int num,tmp1,tmp2;
17             scanf("%d",&num);
18             if(num>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<n;++i)
29             if(getr(i)==tmp)
30                 ++res;
31         printf("%d
",res);
32     }
33     return 0;
34 }

 

以上是关于poj1611(并查集简单应用)的主要内容,如果未能解决你的问题,请参考以下文章

poj1611 The Suspects(并查集)

POJ 1611---The Suspects(并查集)

poj 1611 The Suspects 并查集

POJ-1611 The Suspects( 并查集 )

并查集——poj1611(入门)

poj1611(并查集)