描述
学校有 n 个同学,每个同学有且只有一个信仰并且,(1∼n)编号,给出 m 对有同一信仰的同学,问存在多少种不同的信仰?
输入描述
输入一个 n 和 m。
以下 m 行,每行输入两个数 a,b,代表 a 同学和 b 同学拥有同一信仰。
输出描述
输出一共有多少种信仰。
样例输入 1
10 4
2 3
4 5
4 8
5 8
样例输出 1
7
提示
数据范围与提示
0
#include
using namespace std;
long long n,k,a,b,q,f[50000],maxn,m;
void init(int n){
for(int i=1;i<=n;i++){
f[i]=i;
}
}
int find(int x){
if(f[x]==x) return x;
else return f[x]=find(f[x]);
}
void merge(int x,int y){
int xx=find(x),yy=find(y);
f[xx]=yy;
}
int main(){
cin>>n>>k;
init(n);
for(int i=1;i<=k;i++){
cin>>a>>b;
merge(a,b);
}
for(int i=1;i<=n;i++){
if(find(i)==i){
m++;
}
}
cout<