poj-2524-Ubiquitous Religions

2015-07-20 17:45:55 · 作者: · 浏览: 5
题目大意:一个学校有n人,其中有m对人是具有相同的宗教信仰,
问这个学校里信仰的宗教数最多有多少个。

解题思路:基础的并查集。具有相同信仰的人归为一个集合,

则最后的集合数量即为结果。求集合数量:判断有多少个根节点,用到根节点的特征(其父节点为自己)

代码如下:

#include
  
   
#include
   
     #include
    
      using namespace std; int n,m; int f[52014]; void init() { for(int i=1; i<=n; i++) f[i]=i; } int find(int x) { return f[x]==x?x:find(f[x]); } void unity(int a,int b) { if(find(a)!=find(b)) f[find(a)]=find(b); } int main() { int ji=1; while(cin>>n>>m) { if(n+m==0)break; init(); while(m--) { int a,b; cin>>a>>b; unity(a,b); } int ans=0; for(int i=1; i<=n; i++) if(f[i]==i) ans++; cout<<"Case "<