BIT1061Ubiquitous Religions

来源:互联网 发布:淘宝店如何发布宝贝 编辑:程序博客网 时间:2024/06/05 09:43

题意:

学校里的学生有很多信仰,你要知道学校里最多有多少种信仰,但是你不能去问每一个学生,你只能问两个学生他们的信仰是否一样

输入有多组样例

每组样例的第一行是n和m,n是学生数,从1,到n编号,接下来m行a和b,表示

a和b的信仰相同

当n和m为0的时候,输入停止

解法:

并查集

#include<iostream>#include<algorithm>#include<cstdio>using namespace std;int parent[50100];int root(int i){if(parent[i]==i){return i;}return parent[i]=root(parent[i]);}void Merge(int a,int b){int ra=root(a);int rb=root(b);parent[ra]=rb;}int main(){int n,m;int kk=1;while(scanf("%d %d",&n,&m),n||m){for(int i=1;i<=n;i++){parent[i]=i;}int a,b;while(m--){scanf("%d %d",&a,&b);Merge(a,b);}int counter=0;for(int i=1;i<=n;i++){if(parent[i]==i){counter++;}}printf("Case %d: %d\n",kk++,counter);}return 0;}