pat 团体天梯 L3-003. 社交集群
L3-003. 社交集群
在社交网络平台注册时,用户通常会输入自己的兴趣爱好,以便找到和自己兴趣相投的朋友。有部分兴趣相同的人们就形成了“社交集群”。现请你编写程序,找出所有的集群。
输入格式:
输入的第一行给出正整数N(<=1000),即社交网络中的用户总数(则用户从1到N编号)。随后N行,每行按下列格式列出每个人的兴趣爱好:
Ki: hi[1] hi[2] ... hi[Ki]
其中Ki(>0)是第i个人的兴趣的数量,hi[j]是第i个人的第j项兴趣的编号,编号范围为[1, 1000]内的整数。
输出格式:
首先在第一行输出整个网络中集群的数量,然后在第二行按非递增的顺序输出每个集群中用户的数量。数字间以1个空格分隔,行首尾不得有多余空格。
输入样例:
- 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
思路:并查集,两个人若有相同的兴趣,则在一个集合中。
AC代码:
- #define _CRT_SECURE_NO_DEPRECATE
- #include<iostream>
- #include<cmath>
- #include<algorithm>
- #include<cstring>
- #include<vector>
- #include<string>
- #include<iomanip>
- #include<map>
- #include<stack>
- #include<set>
- using namespace std;
- #define N_MAX 1000+2
- #define INF 0x3f3f3f3f
- int n;
- bool interest[N_MAX][N_MAX];
- vector<int>vec[N_MAX];
- int root[N_MAX];
- int statistic[N_MAX];
- int par[N_MAX], Rank[N_MAX];
- void init(int n) {
- for (int i = ; i < n;i++) {
- par[i] = i;
- Rank[i] = ;
- }
- }
- int find(int x) {
- if (x == par[x])return x;
- else {
- return par[x] = find(par[x]);
- }
- }
- void unite(int x,int y) {
- x = find(x);
- y = find(y);
- if (x == y)return;
- else {
- if (Rank[y] > Rank[x])par[x] = y;
- else {
- par[y] = x;
- if (Rank[x] == Rank[y])Rank[x]++;
- }
- }
- }
- bool same(int x,int y) {
- return find(x) == find(y);
- }
- bool cmp (const int &a,const int &b) {
- return a > b;
- }
- int main() {
- while (scanf("%d", &n) != EOF) {
- memset(interest,,sizeof(interest));
- init(N_MAX);
- for (int i = ; i < n;i++) {
- int num; scanf("%d",&num);
- scanf(": ");
- while (num--) {
- int a; scanf("%d", &a);
- interest[i][a] = true;
- vec[i].push_back(a);
- }
- }
- for (int i = ; i < n;i++) {
- for (int j = i+; j < n;j++) {
- for (int k = ; k < vec[j].size();k++) {
- if (interest[i][vec[j][k]]) {
- unite(i, j); break;
- }
- }
- }
- }
- set<int>S; memset(statistic,,sizeof(statistic));
- for (int i = ; i < n;i++) {
- root[i] = find(i);
- S.insert(root[i]);
- statistic[root[i]]++;
- }
- printf("%d\n",S.size());
- sort(statistic, statistic + n,cmp);
- for (int i = ; i < S.size();i++) {
- printf("%d%c",statistic[i],i+==S.size()?'\n':' ');
- }
- }
- return ;
- }
pat 团体天梯 L3-003. 社交集群的更多相关文章
- PAT L3-003 社交集群
https://pintia.cn/problem-sets/994805046380707840/problems/994805053141925888 当你在社交网络平台注册时,一般总是被要求填写 ...
- CCCC L2 部落 L3社交集群
https://www.patest.cn/contests/gplt/L2-024 题解:部落是并查集模板题. 社交集群用并查集暴力有23分 坑:写了半天,发现自己并查集没怎么学明白,现在才搞懂: ...
- L3-003. 社交集群
L3-003. 社交集群 题目链接:https://www.patest.cn/contests/gplt/L3-003 查并集 与L2-007(家庭房产)类似,都是采用了并查集的算法,相对来说这题处 ...
- pat 团体天梯 L3-011. 直捣黄龙
L3-011. 直捣黄龙 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题是一部战争大片 —— 你需要从己方大本营出发,一路 ...
- pat 团体天梯赛 L3-007. 天梯地图
L3-007. 天梯地图 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校 ...
- pat 团体天梯赛 L3-015. 球队“食物链”
L3-015. 球队“食物链” 时间限制 1000 ms 内存限制 262144 kB 代码长度限制 8000 B 判题程序 Standard 作者 李文新(北京大学) 某国的足球联赛中有N支参赛球队 ...
- pat 团体天梯赛 L1-039. 古风排版
L1-039. 古风排版 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 中国的古人写文字,是从右向左竖向排版的.本题就请你编写 ...
- pat 团体天梯赛 L2-012. 关于堆的判断
L2-012. 关于堆的判断 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的小顶堆H[] ...
- pat 团体天梯赛 L3-010. 是否完全二叉搜索树
L3-010. 是否完全二叉搜索树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的二叉搜 ...
随机推荐
- Java 替换word文档文字,指定位置插入图片
先说下 需要的依赖包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ex ...
- Linux监控一之Nagios的安装与配置
一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报 ...
- kubernetes搭建dashboard-v1.10.1
一键部署脚本(或者可使用helm安装): wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/ ...
- videojs的使用
[官网]http://www.videojs.com/ videojs就提供了这样一套解决方案,他是一个兼容HTML5的视频播放工具,早期版本兼容所有浏览器,方法是:提供三个后缀名的视频,并在不支持h ...
- mysql中的FROM_UNIXTIME()函数和UNIX_TIMESTAMP()函数
unix_timestamp 是时间戳,可以用数据库里的存储时间数据的字段 from_unixtime 是将时间戳格式化为你想要时间
- 第9课 文章模块分析及建表 Thinkphp5商城第四季
目录 文章模块的分析 表结构 文章模块的分析 表结构 CREATE TABLE `tp_cate` ( `id` smallint(6) NOT NULL AUTO_INCREMENT COMMENT ...
- Codeforces Round #461 (Div. 2) B. Magic Forest
B. Magic Forest time limit per test 1 second memory limit per test 256 megabytes Problem Description ...
- Linux命令之---touch
命令简介 linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件. 命令格式 touch [选项]... 文件... 命令参数 -a 或 ...
- RAID与LVM磁盘阵列技术
RAID(Redundant Array of Independent Disks,独立冗余磁盘阵列) RAID概念: RAID技术通过把多个硬盘设备组合成一个容量更大.安全性更好的磁盘阵列,并把数据 ...
- java集群技术
序言 越来越多的关键应用运行在J2EE(Java 2, Enterprise Edition)中,这些诸如银行系统和账单处理系统需要高的可用性(High Availability, HA),同时像Go ...