PAT1107 甲级代码如下#include <iostream>#include <algorithm>using namespace std;int father[1001];int hobby[1001]={0};int cnt[1001]={0};bool compare(int a,int b){return a>b;}int findfather(int x){int v;if(x==father[x]){return x;}else{v=findfather(father[x]);father[x]=v;return v;}}void unionset(int a,int b){int fathera=findfather(a);int fatherb=findfather(b);if(fathera != fatherb){father[fatherb]=fathera;}}int main(){int numpeople;int eachnum;for(int p=0;p<1001;p++){father[p]=p;}int index;scanf("%d",&numpeople);for(int i=1;i<=numpeople;i++){scanf("%d:",&eachnum);for(int j=0;j<eachnum;j++){cin>>index;if(hobby[index]==0){hobby[index]=i;}unionset(i,hobby[index]);}}for(int i=1;i<=numpeople;i++){cnt[findfather(i)]++;}int count=0;for(int i=0;i<1001;i++){if(cnt[i]!=0){count++;}}sort(cnt,cnt+1001,compare);cout<<count<<endl;for(int q=0;q<count-1;q++){cout<<cnt[q]<<" ";}cout<<cnt[count-1];return 0;}