版权声明:https://github.com/godspeedcurry 欢迎加好友哦 https://blog.csdn.net/qq_38677814/article/details/82416513
有共同爱好的属于一个集合
并查集!
注意可以先合并再查每个人属于哪个集合
#include <bits/stdc++.h>
using namespace std;
#define FORP(i,a,b) for(int i=a;i<=b;i++)
set<int> s[1025];
int fa[1024];
int cnt[1024];
int find(int x){
return x==fa[x]?x:fa[x]=find(fa[x]);
}
void Union(int x,int y){
int fx=find(x);
int fy=find(y);
if(fx!=fy) fa[fy]=fx;
}
int main(){
FORP(i,1,1023){
fa[i]=i;
}
int n;cin>>n;
FORP(i,1,n){
int k;
cin>>k;
getchar();
int rt;
cin>>rt;
s[i].insert(rt);
FORP(j,2,k){
int data;
cin>>data;
s[i].insert(data);
Union(rt,data);
}
}
FORP(i,1,n){
cnt[find(*s[i].begin())]++;
}
vector<int> ans;
FORP(i,1,1023){
if(cnt[i]){
ans.push_back(-cnt[i]);
}
}
sort(ans.begin(),ans.end());
cout<<ans.size()<<endl;
FORP(i,0,ans.size()-1){
printf("%d%c",-ans[i],i==ans.size()-1?'\n':' ');
}
return 0;
}