PAT Advanced 1107 【Social Clusters】(30 )

分析:PAT之日常并查集。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n, father[1010], seq[1010], res[1010];
int cmp(int a, int b){
	return a > b;
}
void init(){
	for(int i = 0; i<1010; i++){
		father[i] = i;
	}
}
int getF(int x){
	return x == father[x] ? x : father[x] = getF(father[x]);
}
void merge(int a, int b){
	int fa = getF(a), fb = getF(b);
	if(fa != fb) father[fa] = fb;
}
int main(){
	//freopen("aa.txt", "r", stdin);
	init();
	scanf("%d", &n);
	int num, tem, first, cnt = 0;
	for(int i = 0; i<n; i++){
		scanf("%d: %d", &num, &first);
		seq[i] = first;
		for(int j = 1; j<num; j++){
			scanf("%d", &tem);
			merge(first, tem);
		}
	}
	for(int i = 0; i<n; i++){
		int fa = getF(seq[i]);
		if(!res[fa]){
			cnt++;
		}
		res[fa]++;
	}
	sort(res, res+1010, cmp);
	cout << cnt << '\n';
	for(int i = 0; i<cnt; i++){
		cout << res[i];
		i != cnt-1 ? cout << " " : cout << '\n';
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/gq__97/article/details/82107169