题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805053141925888

题意:给定n个人,以及每个人的兴趣,把有相同兴趣的人并成一个社交集群,问有多少个群,并以非递增方式输出所有群的人数。

思路:如果合并人的话,会复杂许多,这里我们可以合并兴趣,并用每个人的第一个兴趣表示其兴趣,将每个人的所有兴趣合并起来,之后遍历n个人,要统计人的群和群的人数,与将其第一兴趣的祖先所在的群的操作一致。说的有点绕,直接看代码吧,模拟模拟就懂了。

AC代码:

 #include<bits/stdc++.h>
using namespace std; const int maxn=;
int n,k,q,root[maxn],res[maxn],a[maxn]; bool cmp(int x,int y){
return x>y;
} int getr(int kk){
if(root[kk]==kk) return kk;
else return root[kk]=getr(root[kk]);
} void Union(int x,int y){
int xr=getr(x),yr=getr(y);
if(xr!=yr)
root[yr]=xr;
} int main(){
scanf("%d",&n);
for(int i=;i<=;++i)
root[i]=i;
for(int i=;i<=n;++i){
int t;
scanf("%d",&k);
getchar();
scanf("%d",&t);
a[i]=t,--k;
while(k--){
scanf("%d",&t);
Union(a[i],t);
}
}
for(int i=;i<=n;++i)
++res[getr(a[i])];
for(int i=;i<=;++i)
if(res[i]) ++q;
sort(res,res+maxn,cmp);
printf("%d\n",q);
printf("%d",res[]);
for(int i=;i<q;++i)
printf(" %d",res[i]);
printf("\n");
return ;
}

最新文章

  1. wordpress多站点配置
  2. hdu-2444-二分图判定+最大分配
  3. js如何求一组数中的极值
  4. php rsa加密解密实例
  5. flask SQLAlchemy中一对多的关系实现
  6. iOS—图片编辑,文字下落动画的Demo
  7. 完整的ajax请求投票点赞功能的实现【数据库表一(票数)表二(ip限制重复投票)】
  8. Mina 资料
  9. 在Linux用libcurl.a在链接的时候出错
  10. asp.net动态添加GridView的模板列,并获取列值
  11. CVirtualGridCtrl控件内的数据如何获取
  12. ubuntu系统下创建软件桌面快捷方式
  13. Eric Pement的单行awk命令收集
  14. something funny
  15. backtrack种子
  16. Linux usb子系统(一) _写一个usb鼠标驱动
  17. python学习笔记 改变字符串中的某一位
  18. 【转】Setting up SDL 2 on Visual Studio 2010 Ultimate
  19. css-不固定宽高定位
  20. gnuradio 使用eclipse 编辑器记录

热门文章

  1. centos7管理用户权限
  2. scrapy中deferred的回调
  3. DDD随笔-Axon
  4. kubernetes国内镜像拉取
  5. leetcode997
  6. vue的初识与简单使用---前后端分离通过接口调取数据
  7. 02-body标签中相关标签-1
  8. Nexus3忘记admin密码时的解决办法
  9. debian9 下编译安装tengine2.2.1
  10. SQL Server--存在则更新问题