L3-003 社交集群 (天梯赛)

首先一看就知道是并查集 但是其实这个题不简单
首先要把题目读清楚 一个集合 a b c 可能a和b b和c分别有交集 但是a和c没有交集
首先可以想到对拥有同一个兴趣爱好的人合并 这样 a和b b和c 都分别合并了
现在考虑将 ab整体 和 bc整体 合并 每个人作为b 依次将每个人的兴趣爱好合并即可
并查集还要统计并查集大小
#include
using namespace std;
#define lowbit(x) x&(-x)
#define ll long long
const int maxn=1e3+5;
int fa[maxn],sz[maxn],ans[maxn];
int find(int x){
if(x!=fa[x])return fa[x]=find(fa[x]);
return x;
}
void un(int x,int y){
int fx=find(x),fy=find(y);
fa[fx]=fy;
if(fx!=fy)
sz[fy]+=sz[fx];
return;
}
int n,cnt;
int num[maxn],a[maxn][maxn];
vectorQ[maxn];
int main(){
cin>>n;
for(int i=1;i>num[i];
char s;cin>>s;
for(int j=1;j<=num[i];j++){
cin>>a[i][j];
Q[a[i][j]].push_back(i);
}
}
for(int i=1;i=1;i--)
cout<<" "<