【并查集】:poj2524,Ubiquitous Religions

来源:互联网 发布:mac微信语音导出软件 编辑:程序博客网 时间:2024/05/01 08:56

http://poj.org/problem?id=2524


题目描述:

世界上宗教何其多。假设你对自己学校的学生总共有多少种宗教信仰很感兴趣。学校有n个学生,但是你不能直接问学生的信仰,不然他会感到很不舒服的。有另外一个方法是问m对同学,是否信仰同一宗教。根据这些数据,相信聪明的你是能够计算学校最多有多少种宗教信仰的。



# include<iostream># include<string.h># include<map>using namespace std;# define N 50005int data[N];void MakeSet(int n){for(int i=1;i<=n;i++){data[i]=i;}}int Find(int i){if(i==data[i]){return i;}else{//return Find(data[i]);data[i]=Find(data[i]);return data[i];}}void Union(int i, int j){int ip=Find(i);int jp=Find(j);if(ip!=jp){data[ip]=jp;}}int main(){int i,j,k,n,m,t;map<int, int> mp;t=0;while(true){cin>>n>>m;if(n==0 && m==0){break;}mp.clear();MakeSet(n);for(i=1;i<=m;i++){cin>>j>>k;Union(j,k);}for(i=1;i<=n;i++){//mp[data[i]]=1;mp[Find(i)]=1; //注意}cout<<"Case "<<++t<<": "<<mp.size()<<endl;}return 0;}




0 0