/*************
*Author:chanjun
*email:15755396353@163.com
*************/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cmath>
#include <vector>
#include <stack>
#include <queue>
#include <string>
#include <list>
#include <deque>
#include <map>
#include <set>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define EXP 1e-8
#define LL long long
int n;
int fa[2010];
map<int,int> Hash;
int id;
int ID(int x){
if (Hash[x] == 0){
return Hash[x] = ++id;
}
return Hash[x];
}
int root(int x){
if (fa[x]!=x){
return fa[x] = root(fa[x]);
}else{
return x;
}
}
void uni(int a,int b){
int x = root(a);
int y = root(b);
if (x!=y){
fa[x] = y;
}
}
int main(){
//freopen("a.in","r",stdin);
//freopen("a.out","w",stdout);
scanf("%d",&n);
int k,x;
char ch;
for (int i = 0; i <= 2000; ++i){
fa[i] = i;
}
for (int i = 0; i < n; ++i){
scanf("%d%c",&k,&ch);
for (int j = 0; j < k; ++j){
scanf("%d",&x);
uni(i,x+1000);
}
}
int cnt[1010] = {0};
for (int i = 0; i < n; ++i){
cnt[ID(root(i))]++;
}
sort(cnt+1,cnt+id+1,greater<int>());
printf("%d\n%d", id,cnt[1]);
for (int i = 2; i <= id; ++i){
printf(" %d", cnt[i]);
}
system("pause");
return 0;
}
pat advanced 1107
最新推荐文章于 2019-05-24 22:49:44 发布