#include<iostream>
#include<vector>
#include<unordered_map>
#include<algorithm>
#include<unordered_set>
using namespace std;
unordered_map<int,int> vis;
unordered_set<int> s;
vector<int> res;
using namespace std;
int father[1002];
int n,k,temp;
int findFather(int x){
int t=x;
while(father[x]!=x){
x=father[x];
}
//路径压缩
while(father[t]!=x){
int temp=father[t];
father[t]=x;
t=temp;
}
return x;
}
void union1(int u,int v){
int fu=findFather(u);
int fv=findFather(v);
if(fu != fv){
father[fu]=fv;
}
}
int main(){
cin>>n;
for(int i=1;i<=n;++i){
father[i]=i;
}
for(int i=1;i<=n;++i){
scanf("%d: ",&k);
for(int j=1;j<=k;++j){
cin>>temp;
if(vis[temp] > 0){
union1(vis[temp],i);
}else{
vis[temp]=i;
}
}
}
for(int i=1;i<=n;++i){
s.insert(findFather(i));
}
cout<<s.size()<<endl;
for(auto x:s){
int count=0;
for(int i=1;i<=n;++i){
if(findFather(i) == x){
count++;
}
}
res.push_back(count);
}
sort(res.begin(),res.end(),greater<>());
for(int i=0;i<res.size()-1;++i){
cout<<res[i]<<" ";
}
if(res.size()-1 >=0){
cout<<res[res.size()-1]<<endl;
}
return 0;
}
PAT 甲级 1107 Social Clusters
最新推荐文章于 2024-07-12 10:56:01 发布