L3-003. 社交集群

时间限制
1000 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越

在社交网络平台注册时,用户通常会输入自己的兴趣爱好,以便找到和自己兴趣相投的朋友。有部分兴趣相同的人们就形成了“社交集群”。现请你编写程序,找出所有的集群。

输入格式:

输入的第一行给出正整数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. 社交集群的更多相关文章

  1. PAT L3-003 社交集群

    https://pintia.cn/problem-sets/994805046380707840/problems/994805053141925888 当你在社交网络平台注册时,一般总是被要求填写 ...

  2. CCCC L2 部落 L3社交集群

    https://www.patest.cn/contests/gplt/L2-024 题解:部落是并查集模板题. 社交集群用并查集暴力有23分 坑:写了半天,发现自己并查集没怎么学明白,现在才搞懂: ...

  3. L3-003. 社交集群

    L3-003. 社交集群 题目链接:https://www.patest.cn/contests/gplt/L3-003 查并集 与L2-007(家庭房产)类似,都是采用了并查集的算法,相对来说这题处 ...

  4. pat 团体天梯 L3-011. 直捣黄龙

    L3-011. 直捣黄龙 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题是一部战争大片 —— 你需要从己方大本营出发,一路 ...

  5. pat 团体天梯赛 L3-007. 天梯地图

    L3-007. 天梯地图 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校 ...

  6. pat 团体天梯赛 L3-015. 球队“食物链”

    L3-015. 球队“食物链” 时间限制 1000 ms 内存限制 262144 kB 代码长度限制 8000 B 判题程序 Standard 作者 李文新(北京大学) 某国的足球联赛中有N支参赛球队 ...

  7. pat 团体天梯赛 L1-039. 古风排版

    L1-039. 古风排版 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 中国的古人写文字,是从右向左竖向排版的.本题就请你编写 ...

  8. pat 团体天梯赛 L2-012. 关于堆的判断

    L2-012. 关于堆的判断 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的小顶堆H[] ...

  9. pat 团体天梯赛 L3-010. 是否完全二叉搜索树

    L3-010. 是否完全二叉搜索树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的二叉搜 ...

随机推荐

  1. Perl_实用报表提取语言

    Perl 语法 - 基础   perl语言的核心是正则表达式,在文本处理上非常有优势,与python类似,但语法不同,perl的语法很灵活,用多了才会觉得好用. 常用知识点总结: perl语法类似于C ...

  2. 1005: [HNOI2008]明明的烦恼

    Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 6539  Solved: 2558[Submit][Status][Discuss] Descripti ...

  3. MySQL - CASE WHEN ... THEN ... ELSE ... END语句

    范例: CASE WHEN p.allow_over = 1 THEN p.allow_over_capital ELSE 0 END

  4. 二十九、MySQL 序列使用

    MySQL 序列使用 MySQL 序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现. 本章我们将介绍 ...

  5. k8s的pv和pvc简述

    pvc:资源需要指定:1.accessMode:访问模型:对象列表:    ReadWriteOnce – the volume can be mounted as read-write by a s ...

  6. (转)iOS 对矢量图片的支持如何?

    简单说,iOS 支持矢量图片,不过支持的一般.在系统层面上,iOS 对矢量绘图支持得很好.iOS 的 Core Graphics 框架带有很多矢量绘图命令,简单一些的直线.矩形.椭圆,复杂一些的贝赛尔 ...

  7. 获取PHP页面的当前文件名(包括后缀名)

    // $curPhp = substr($_SERVER['PHP_SELF'],strripos($_SERVER['PHP_SELF'],'/')+1); // print_r($_SERVER[ ...

  8. python学习笔记(四):生成器、内置函数、json

    一.生成器 生成器是什么?其实和list差不多,只不过list生成的时候数据已经在内存里面了,而生成器中生成的数据是当被调用时才生成呢,这样就节省了内存空间. 1. 列表生成式,在第二篇博客里面我写了 ...

  9. du 与df 统计系统磁盘不一致原因与解决方法

    事件起因: 同事发现云主机磁盘系统盘满了,准备清理系统盘,便利用du 命令统计了根目录下各文件夹的大小,发现统计的各文件夹的大小总和 加起来比 df 命令查看到的系统盘所使用空间 要小很多.这里记录下 ...

  10. POJ3320 尺取法的正确使用法

    一.前言及题意: 最近一直在找题训练,想要更加系统的补补思维,补补漏洞什么的,以避免被个类似于脑筋急转弯的题目干倒,于是在四处找书,找了红书.蓝书,似乎都有些不尽如人意.这两天看到了日本人的白书,重新 ...