POJ-2524 Ubiquitous Religions
题目链接:POJ-2524
题目大意:给定一对学生编号 即为这两个学生信奉同一份Religions
求一共有多少种Religions
解题思路:并查集 查出一共有多少种结果 完全的模板题 不会请移步并查集详解
代码块:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int arrA[50005]={0};
// 找超父函数 若要输入全部集合 遍历调用find即可
int find(int x){
if(arrA[x] != x) return find(arrA[x]);
else return x;
}
// 整合函数
void un(int a, int b){
int pareA = find(a);
int pareB = find(b);
arrA[pareB] = pareA;
}
int main() {
int n,m;
int cnt = 1;
while(cin>>n>>m) {
if(n+m == 0) return 0;
int sum = 0;
for(int i = 1; i <= n; i++){
arrA[i] = i;
}
for(int i = 1; i <= m; i++) {
int a,b;
cin>>a>>b;
un(a, b);
}
for(int i = 1; i <= n; i++){
arrA[i] = find(i);
if(arrA[i] == i) sum++;
}
cout<<"Case "<<cnt++<<": "<<sum<<endl;
}
return 0;
}