并查集 朋友圈个数

//并查集 找朋友圈

#include<bits/stdc++.h>
using namespace std;

int father(vector<int>& arr, int n){
    if(arr[n] == -1){
        return n;
    }
    return father(arr, arr[n]);
}

void Union(vector<int>&arr, int m , int n){
    int fa_m = father(arr, m);
    int fa_n = father(arr, n);
    if(fa_m != fa_n){
        arr[fa_m] = fa_n;
    }
}

void print(vector<int>&arr){
    for(auto i : arr){
        if(i == -1){
            cout<<i<<" ";
        }
        else{
            cout<<i + 1<<" ";
        }
    }
    cout<<endl;
}
int main()
{
    int n = 5;
    vector<vector<int>> vec = {
   
   {2,3}, {5,3}, {1,4}};
    vector<int> parent(n, -1);
    for(auto i : vec){
        Union(parent, i[0] - 1, i[1] - 1);
    }
    int ans = 0;
    for(int i = 0; i < n; ++i){
        if(parent[i] == -1){
            ans++;
        }
    }
    print(parent);
    cout<<ans<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_24624539/article/details/108613299