poj 2524 Ubiquitous Religions (并查集)
题目:http://poj.org/problem?id=2524
题意:问一个大学里学生的宗教,通过问一个学生可以知道另一个学生是不是跟他信仰同样的宗教。问学校里最多可能有多少个宗教。
也就是给定一个图的点数和相应的边,问有多少个连通分量。
1 #include<stdio.h> 2 #include<iostream> 3 #include<string.h> 4 5 using namespace std; 6 int bin[50010]; 7 8 int find(int a) 9 { 10 if(bin[a]!=a) 11 return bin[a]=find(bin[a]); 12 }; 13 14 int main() 15 { 16 int n,m,i,a,b,sum,x=1; 17 while(cin>>n>>m&&(n||m)) 18 { 19 sum=n; 20 for(i=1; i<=n; i++) 21 bin[i]=i; 22 23 for(i=1; i<=m; i++) 24 { 25 cin>>a>>b; 26 if(find(a)!=find(b)) 27 { 28 sum--; 29 bin[find(a)]=find(b); 30 } 31 } 32 33 printf("Case %d: %d\n",x,sum); 34 x++; 35 } 36 }
跑时有点多,4600MS 低空掠过