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;
}
代码如下
#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;
}
全部评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享