标签:
100 4 2 1 2 5 10 13 11 12 14 2 0 1 2 99 2 200 2 1 5 5 1 2 3 4 5 1 0 0 0
4 1 1
大意:
有n个人编号为0~n,m个团队,每个团队开头k表示k个人,然后是k个人的编号,编号为0的是嫌疑人,和嫌疑人在一个团队的也是嫌疑人,求嫌疑人的数量。
解题思路:
先输入n个学生,对fa[]初始化,然后输入m个团队的第一个人fir,后每输入一个人与fir比较,并放在一个集合,最后判断0~n个人有多少在0集合里。
并查集链接
1 #include<cstdio> 2 int n,m,ans,i,j,k,fir,fa[30000+11],a; 3 int find(int a) 4 { 5 if(a == fa[a]) 6 { 7 return a; 8 } 9 else 10 { 11 return fa[a]=find(fa[a]); 12 } 13 } 14 void f1(int x,int y) 15 { 16 int nx,ny; 17 nx=find(x); 18 ny=find(y); 19 if(ny == 0) 20 { 21 fa[nx]=ny; 22 } 23 else 24 { 25 fa[ny]=nx; 26 } 27 } 28 int main() 29 { 30 while(scanf("%d %d",&n,&m) && (m+n)) 31 { 32 for(i = 0 ; i < n ; i++) 33 { 34 fa[i]=i; 35 } 36 for(i = 0 ; i < m ; i++) 37 { 38 scanf("%d %d",&k,&fir); 39 for(j = 1 ; j < k ; j++) 40 { 41 scanf("%d",&a); 42 f1(fir,a); 43 } 44 } 45 ans=0; 46 for(i = 0 ; i < n ; i++) 47 { 48 if(find(i) == 0) 49 { 50 ans++; 51 } 52 } 53 printf("%d\n",ans); 54 } 55 }
POJ 1611 The Suspects (并查集求数量)
标签:
原文地址:http://www.cnblogs.com/yexiaozi/p/5725120.html