L3-003 社交集群 (30分)
当你在社交网络平台注册时,一般总是被要求填写你的个人兴趣爱好,以便找到具有相同兴趣爱好的潜在的朋友。一个“社交集群”是指部分兴趣爱好相同的人的集合。你需要找出所有的社交集群。
输入格式:

输入在第一行给出一个正整数 N(≤1000),为社交网络平台注册的所有用户的人数。于是这些人从 1 到 N 编号。随后 N 行,每行按以下格式给出一个人的兴趣爱好列表:
K
​i
​​ : h
​i
​​ [1] h
​i
​​ [2] … h
​i
​​ [K
​i
​​ ]
其中K
​i
​​ (>0)是兴趣爱好的个数,h
​i
​​ [j]是第j个兴趣爱好的编号,为区间 [1, 1000] 内的整数。
输出格式:

首先在一行中输出不同的社交集群的个数。随后第二行按非增序输出每个集群中的人数。数字间以一个空格分隔,行末不得有多余空格。
输入样例:

8
3: 2 7 10
1: 4
2: 5 3
1: 4
1: 3
1: 4
4: 6 8 1 5
1: 4
输出样例:

3
4 3 1

本题使用并查集便可解决,思路很简单,注意的是需要将爱好和人的编号分开

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn = 1002;
int course[maxn]{ 0 };//存储该兴趣爱好的人编号
int pre[maxn]{ 0 };
vector<int>v(maxn);//存储不同社交集群的人数
int find(int x)//并查集模板,查找
{while (x != pre[x]) x = pre[x];return x;
}
void merge(int a, int b)//并查集模板,合并
{int x = find(a);int y = find(b);if (x != y) pre[x] = y;
}
bool cmp(int a, int b)//自定义排序
{return a > b;//加条件回报段错误
}
int main()
{int n, k, value;//value存储兴趣爱好编号for (int i = 1; i < maxn; i++) pre[i] = i;//初始化pre数组cin >> n;for (int i = 1; i <= n; i++){cin >> k;getchar();for (int j = 0; j < k; j++){cin >> value;if (course[value] == 0) course[value] = i;//如果该兴趣爱好还没有划分组,进行另它为i号人的兴趣,course[value]=i;else merge(i, course[value]);//否则,将i和course[value]的人编号合并。}}int count = 0;//存储集群数for (int i = 1; i <= n; i++){int fa = find(i);//查找老大if (v[fa] == 0) count++;//如果没被访问过(人员为0),集群数加一v[fa]++;//人员数加加}cout << count << endl;sort(v.begin()+1, v.end(), cmp);//降序int flag = 0;//第一个数不能是空格for (int i = 1; i <= count; i++){if (v[i] != 0){if (flag++ == 0)cout << v[i];else cout << " " << v[i];}}}

C++学习之路 | PTA(天梯赛)—— L3-003 社交集群 (30分) (带注释) (并查集) (精简)相关推荐

  1. PTA团体程序设计天梯赛篇(五)---- 难题篇一(30分题目)

    PTA团体程序设计天梯赛 数据结构类型 L3-002 特殊堆栈(树状数组) L3-003 社交集群(并查集) 搜索 L3-004 肿瘤诊断(三维bfs) 确保bfs只遍历一次的方法 图论 L3-005 ...

  2. 马上要参加天梯赛分享优质题目-L3-011 直捣黄龙 (30分)---三个关键字的最短路径算法

    L3-011 直捣黄龙 (30分) 本题是一部战争大片 -- 你需要从己方大本营出发,一路攻城略地杀到敌方大本营.首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营.当这样的路径不 ...

  3. C++学习之路 | PTA乙级—— 1083 是否存在相等的差 (20 分)(精简)

    1083 是否存在相等的差 (20 分) 给定 N 张卡片,正面分别写上 1.2.--.N,然后全部翻面,洗牌,在背面分别写上 1.2.--.N.将每张牌的正反两面数字相减(大减小),得到 N 个非负 ...

  4. C++学习之路 | PTA乙级—— 1078 字符串压缩与解压 (20 分)(精简)

    1078 字符串压缩与解压 (20 分) 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示.例如 ccccc 就用 5c 来 ...

  5. C++学习之路 | PTA乙级—— 1073 多选题常见计分法 (20 分)(精简)

    1073 多选题常见计分法 (20 分) 批改多选题是比较麻烦的事情,有很多不同的计分方法.有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到 50% 分数:如果考 ...

  6. C++学习之路 | PTA乙级—— 1008 数组元素循环右移问题 (20分)(精简)

    1008 数组元素循环右移问题 (20分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A ​0 ​​ A ​1 ​​ ...

  7. C++学习之路 | PTA乙级—— 1006 换个格式输出整数 (15分)(精简)

    1006 换个格式输出整数 (15分) 让我们用字母 B 来表示"百".字母 S 表示"十",用 12-n 来表示不为零的个位数字 n(<10),换个格式 ...

  8. pta 天梯赛 7-2 圆形体体积计算器 (20 分)day5

    本题要求实现一个常用圆形体体积的计算器.计算公式如day5下: 计算公式如下: 球体体积 V= ​3 ​ ​4 ​​ πr ​3 ​​ ,其中r是球体半径. 圆柱体体积 V=πr ​2 ​​ h,其中 ...

  9. PTA 天梯赛 L1-020 帅到没朋友 (20 分) Java

    当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友.本题就要求你找出那些帅到没有朋友的人. 输入格式: 输入第一行给出一个正整数N(≤100),是已知朋友圈的个数:随后N行,每行首先给 ...

最新文章

  1. ajax拿table里的th值,Jquery Ajax 异步设置Table中某列的值
  2. Some projects cannot be imported because they already exist in the workspace
  3. 算法面试题汇总(更新中)
  4. 六、jQuery 中的 AJAX 跨域问题
  5. mac上python3安装HTMLTestRunner
  6. java flink使用addSink方法保存流数据到redis
  7. php 未实例化类调用方法的问题
  8. WPF:Documents文档--Annomation批注(1)
  9. 微服务与架构师的个人见解
  10. 网页游戏用的什么编程语言
  11. 【论文阅读】VulCNN: An Image-inspired Scalable Vulnerability Detection System
  12. CSS动态绑定背景图片
  13. 12V继电器开关控制
  14. mutual information matlab,Mutual information and Normalized Mutual information 互信息和标准化互信息...
  15. 深圳企业选择深圳SEO外包的理由
  16. 使用Autoit3 自动登录163邮箱
  17. 一切系统都是分布式的
  18. CSS——伪类选择器
  19. 移动直播app软件直播平台怎么创建
  20. 蓝牙核心规范(V5.2)7.4-深入详解之AMP

热门文章

  1. TPLinker 联合抽取 实体链接方式+源码分析
  2. 玩转算法面试-第四章查找值之leetcod相关笔记
  3. 干货 | 深度学习的可解释性研究(一):让模型「说人话」
  4. Android官方开发文档Training系列课程中文版:连接无线设备之网络服务搜索功能
  5. 在AndroidStudio中配置Gradle进行 “动态编译期间,根据远程服务器地址 ,生成多类安装包”
  6. 算法(二叉树-矩阵-堆排序)
  7. sql server select和set赋值的区别
  8. python中paramiko模块的使用
  9. Oracle Stream Replication技术
  10. DotNet 网上相关资源