正题
题目链接:
http://poj.org/problem?id=2524
大意
有n个学生,告诉你哪两个学生的宗教相等,求校园里有多少个宗教。
解题思路
并查集链接就好了
代码
#include<cstdio>
using namespace std;
int n,m,x,y,s,father[50001],t;
int find(int x)
{if (x!=father[x]) return father[x]=find(father[x]);else return father[x];
}//寻找祖先
int unionn(int x,int y)
{int fa=find(x),fb=find(y);if (fa<fb) father[fb]=fa;else father[fa]=fb;
}//连接
int main()
{while (true){scanf("%d%d",&n,&m);if (n==0) break;t++;s=0;for (int i=1;i<=n;i++) father[i]=i;for (int j=1;j<=m;j++){scanf("%d%d",&x,&y);unionn(x,y);//连接}for (int i=1;i<=n;i++) if (father[i]==i) s++;//统计printf("Case %d: %d\n",t,s);}
}