//并查集 找朋友圈
#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
今日推荐
周排行