有多少种信仰

描述

学校有 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<

你可能感兴趣的:(算法,c++,数据结构)