当前位置: 首页 > news >正文

PTA 社交集群

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

输入格式

输入在第一行给出一个正整数 N(≤1000),为社交网络平台注册的所有用户的人数。于是这些人从 1 到 N 编号。随后 N 行,每行按以下格式给出一个人的兴趣爱好列表: K i : h i [ 1 ] h i [ 2 ] . . . h i [ K i ] K_i: h_{i}[1]\ h_{i}[2]\ ...\ h_{i}[K_i] Ki:hi[1] hi[2] ... hi[Ki],其中 K i ( > 0 ) K_i(>0) Ki(>0) 是第 i 个人的兴趣爱好的个数, h i [ j ] h_{i}[j] hi[j]是第 j 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

一些限制

项目限制
代码长度限制16 KB
时间限制3000 ms
内存限制64 MB
栈限制8192 KB

解题思路

因为每一个人的兴趣爱好不止一个,如果我们按照单一的兴趣爱好来合并,那就会非常不妥当(当然,这样做也是可以通过的,但所花的时间会更多)。

我们可以这样做:

  1. 先设置一个映射关系unordered_map<int, vector<int>>,将每个人归入到每个兴趣爱好的集合中。
  2. 遍历这个映射关系,对于每一个兴趣爱好的集合,将这个集合中的人合并到一个朋友圈中。
    for(auto k: lov) {for(int i = 0, j = 1; j < k.second.size(); ++j) {union1(k.second[i], k.second[j]);}
    }
    
  3. 最后,使用set容器来存储所有的朋友圈,使用unordered_map来存储每个朋友圈的人数,最后输出结果。
    set<int> components;
    unordered_map<int, int> mp;
    for(int i = 1; i <= n; ++i) {components.insert(components.end(), fa[i]);if(mp.find(fa[i]) == mp.end()) mp[fa[i]] = 1;else mp[fa[i]] += 1;
    }
    cout << components.size() << endl;
    vector<int> ans;
    for(auto i: mp) {ans.push_back(i.second);
    }
    

Code

#include <bits/stdc++.h>
using namespace std;
int fa[2000];
set<int> components;
unordered_map<int,vector<int>> lov;void init(int n) {for(int i = 1; i <= n; ++i) {fa[i] = i;}
}int find(int i) {if(i == fa[i]) return i;else {fa[i] = find(fa[i]);return fa[i];}
}int update(int i) {if(i == fa[i]) return i;else {fa[i] = find(fa[i]);return fa[i];}
}void union1(int a, int b) {int afa = find(a), bfa = find(b);fa[afa] = bfa;
}bool cmp(int a, int b) {return a > b;
}int main() {int n, m, t;cin >> n;init(n);for(int i = 1; i <= n; ++i) {scanf("%d: ", &m);for(int j = 1; j <= m; ++j) {scanf("%d", &t);lov[t].push_back(i);}}for(auto k: lov) {for(int i = 0, j = 1; j < k.second.size(); ++j) {union1(k.second[i], k.second[j]);}}for(int i = 0; i <= n; ++i) {update(i);}unordered_map<int, int> mp;for(int i = 1; i <= n; ++i) {components.insert(components.end(), fa[i]);if(mp.find(fa[i]) == mp.end()) mp[fa[i]] = 1;else mp[fa[i]] += 1;}cout << components.size() << endl;vector<int> ans;for(auto i: mp) {ans.push_back(i.second);}sort(ans.begin(), ans.end(), cmp);for(int i = 0; i < ans.size(); ++i) {if(i == 0) cout << ans[i];else cout << " " << ans[i];}
}

相关文章:

PTA 社交集群

当你在社交网络平台注册时&#xff0c;一般总是被要求填写你的个人兴趣爱好&#xff0c;以便找到具有相同兴趣爱好的潜在的朋友。一个“社交集群”是指部分兴趣爱好相同的人的集合。你需要找出所有的社交集群。 输入格式 输入在第一行给出一个正整数 N&#xff08;≤1000&…...

USB Type-C 受电端取电快充协议芯片,支持PD+QC+FCP+SCP+AFC快充协议

前言 随着科技的飞速发展&#xff0c;电子设备对于快速充电的需求日益增加。为了满足这一需求&#xff0c;市场上涌现出了众多快充技术和产品。其中&#xff0c;XSP08Q诱骗取电芯片以其卓越的性能和广泛的应用场景&#xff0c;成为了快充领域的一颗璀璨明星。本文将对XSP08Q P…...

C++ 模板专题 - 参数约束

一&#xff1a;概述&#xff1a; 除了使用SFINAE对模板参数进行约束之外&#xff0c;还可以使用概念&#xff08;Concepts&#xff09;来对模板参数进行约束&#xff0c;确保传入的类似满足特定条件。概念&#xff08;Concepts&#xff09;是C20中引入的&#xff0c;概念是用于…...

电商行业 | 用好企业培训工具,打造精英团队!

在竞争激烈的电商行业中&#xff0c;人才是企业最宝贵的资源。如何持续提升员工的专业技能和服务水平&#xff0c;打造一支高效、专业的金牌员工队伍&#xff0c;是每个电商企业面临的重要课题。企业培训工具作为提升员工能力的关键手段&#xff0c;正逐渐成为电商行业不可或缺…...

python进阶集锦

一、迭代器和生成器 区别 关于迭代器和生成器 迭代器与生成器的区别 迭代器&#xff08;Iterator&#xff09;和生成器&#xff08;Generator&#xff09;是Python中处理序列数据的两种不同概念。迭代器是遵循迭代协议的对象&#xff0c;而生成器是一种特殊类型的迭代器&am…...

8.C++小练习

C小练习 1.练习 1.练习 计算器—加减乘除 函数调用 //简单的计算器 #include <iostream>using namespace std;//封装函数 int add(int a,int b){return a b; }int jian(int a, int b){return a - b; }int cheng(int a,int b){return a * b; }double chu(int a,int b){r…...

实现YOLO V3数据加载器:从文件系统读取图像与标签

引言 在深度学习项目中&#xff0c;数据准备是非常重要的一环。特别是在物体检测任务中&#xff0c;数据的组织和预处理直接影响到模型的训练效果。YOLO V3&#xff08;You Only Look Once Version 3&#xff09;作为一种高效的实时物体检测框架&#xff0c;其数据加载器的设计…...

安装pygod

了解pygod。 It is recommended to use pip for installation. Please make sure the latest version is installed, as PyGOD is updated frequently: pip install pygod # normal install pip install --upgrade pygod # or update if needed如果pip不是最新的&…...

探索Python与Excel的无缝对接:xlwings库的神秘面纱

文章目录 探索Python与Excel的无缝对接&#xff1a;xlwings库的神秘面纱1. 背景介绍&#xff1a;为何选择xlwings&#xff1f;2. xlwings是什么&#xff1f;3. 如何安装xlwings&#xff1f;4. 简单的库函数使用方法打开工作簿创建工作簿读取单元格数据写入单元格数据保存并关闭…...

CISE|暴雨受邀出席第二十六届中国国际软件博览会

10月24日至26日&#xff0c;备受瞩目的第二十六届中国国际软件博览会&#xff08;简称CISE&#xff09;在国家会展中心&#xff08;天津&#xff09;圆满举办。CISE不仅汇聚了来自全国各地的顶尖软件企业和机构&#xff0c;还吸引了众多专家学者和行业精英共襄盛举&#xff0c;…...

OpenEuler22.03-sp2下安装docker-非常实用

1、确定系统版本是openEuler22.03-SP2 [root192 ~]# wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.23.tgz #或者自己下载之后上传到/root下&#xff0c;测试最好是自己下载到本地再上传到服务器上 下载地址&#xff1a;https://download.dock…...

【学术会议论文投稿】前端框架巅峰对决:React、Vue与Angular的全面解析与实战指南

【JPCS独立出版】​第三届能源与动力工程国际学术会议&#xff08;EPE 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议请看&#xff1a;https://ais.cn/u/nuyAF3 引言 在快速发展的前端技术领域&#xff0c;选择合适的框架或库对于项目的成功至关重要。React、Vu…...

[0152].第3节:IDEA中工程与模块

我的后端学习大纲 IDEA大纲 1、Project和Module的概念&#xff1a; 2、Module操作&#xff1a; 2.1.创建Module: 2.2.删除Module&#xff1a; 2.3.导入Module&#xff1a; 1.导入外来模块的代码&#xff1a; 查看Project Structure&#xff0c;选择import module&#xff1a…...

【modbus协议】libmodbus库移植基于linux平台

文章目录 下载库函数源码编译路径添加libmodbus 源码分析核心数据结构常用接口函数 开发 TCP Server 端开发TCP Client 端 下载库函数源码 编译路径添加 libmodbus 源码分析 核心数据结构 modbus_t结构体&#xff1a; 这是 libmodbus 的核心数据结构&#xff0c;代表一个 Mod…...

SpringBoot+Minio实现多文件下载和批量下载

文章目录 SpringBoot+minio实现多文件下载1、SpringBoot+minio实现多文件打成一个压缩包下载1. 添加依赖2. 配置 MinIO 客户端3. 创建下载和压缩逻辑4. 创建控制器方法来触发下载5. 测试下载功能注意事项2、在minio指定的桶名下面生产一个文件夹1. MinIO 配置2. 编写业务逻辑文…...

3.swoole安装【Docker】

一、拉取最新 swoole 镜像 docker pull phpswoole/swoole二、第一次启动swoole容器 docker run --name swoole phpswoole/swoole 三、 拷贝配置文件 docker cp swoole:/var/www /docker/swoole四、 停止 swoole 容器 dcoker stop swoole五、 删除第一次启动的swoole容器 d…...

React 探秘(三): 时间切片

文章目录 背景时间切片原理requestIderCallback 方法setImmediateMessageChannelsetTimeout React 18 时间切片源码手撸时间切片问题拆解构建任务队列宏任务包装首次开启任务递归任务执行workLoop 开启工作循环demo 模拟 总结 背景 前文学习了 fiber 架构和双缓存技术&#xff…...

OSError: Can‘t load tokenizer for ‘bert-base-uncased‘.

一、具体报错&#xff1a; 报错如下&#xff1a; OSError: Cant load tokenizer for bert-base-uncased. If you were trying to load it from https://huggingface.co/models, make sure you dont have a local directory with the same name. Otherwise, make sure bert-bas…...

中国人寿财险青岛市分公司:专业团队,卓越服务

中国人寿财险青岛市分公司拥有一支专业的团队&#xff0c;为客户提供卓越的保险服务。 公司的保险从业人员都经过严格的专业培训和考核&#xff0c;具备扎实的保险知识和丰富的实践经验。他们以客户为中心&#xff0c;用心倾听客户需求&#xff0c;为客户提供个性化的保险方案…...

【SpringCloud】基础问题

文章目录 spring-cloud-dependencies和spring-cloud-alibaba-dependencies的区别<dependencyManagement>和<dependencies>的区别<dependencyManagement><dependencies> 为什么在主函数上加上SpringBootApplication注解就可以扫描到对象为什么bootstrap…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...