1107 Social Clusters (30 分)
思路有空更新
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
int fa[2500], ret[2500];
set<int> s;
int find(int x) {
if(fa[x] == x) return x;
else return fa[x] = find(fa[x]);
}
int main() {
int n, k, x;
cin >> n;
for(int i = 1; i <= 2500; ++i)
fa[i] = i;
for(int i = 1; i <= n; ++i) {
scanf("%d: ", &k);
while(k--) {
cin >> x;
fa[find(x + n)] = find(i);
}
}
for(int i = 1; i <= n; ++i){
s.insert(find(i));
ret[find(i)]++;
}
cout << s.size() << endl;
sort(ret + 1, ret + n + 1, greater<int>());
for(int i = 1; i <= n; ++i){
if(ret[i] == 0) break;
if(i != 1) cout << " ";
cout << ret[i];
}
}