Note
Code
#include<bits/stdc++.h>
using namespace std;
int father[1010];
int find_father(int a){
while(a!=father[a]) a=father[a];
return a;
}
void union_(int a,int b){
int fa=find_father(a);
int fb=find_father(b);
if(fa!=fb) father[fa]=fb;
}
bool cmp(int a,int b){
return a>b;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("data.txt","r",stdin);
#endif
int count[1010];
memset(count,0,sizeof(count));
int n,k,h;
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=0;j<k;j++){
scanf("%d",&h);
if(count[h]==0) count[h]=i;
union_(i,count[h]);
}
}
int cnt=0;
memset(count,0,sizeof(count));
for(int i=1;i<=n;i++){
if(father[i]==i) cnt++;
count[find_father(i)]++;
}
sort(count,count+1010,cmp);
printf("%d\n",cnt);
for(int i=0;i<cnt;i++){
if(i!=0) printf(" ");
printf("%d",count[i]);
}
return 0;
}