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 作者 陈越 将一系列给定数字顺序插入一个初始为空的二叉搜 ...
随机推荐
- Mysql--select基础查询
基本语法:select 查询列表 from 表名 查询列表可以是表中字段.常量值.表达式.函数:查询的结果是一个虚拟的表格. 注意: ①sql语言大小写不敏感 ②关键字不能分行或略写 ③一般书写方式为 ...
- react与微信小程序
由组员完成 原文链接 都说react和微信小程序很像,但是像在什么部分呢,待我稍作对比. 生命周期 1.React React的生命周期在16版本以前与之后发生了重大变化,原因在于引入的React F ...
- python虚拟环境 virtualenv工具
为了隔离各类环境,保证环境间不冲突,python中存在虚拟环境,可以在一个文件夹里生成相应的环境,防止与python自带环境冲突 首先我们下载virtualenv,若你未安装python,应到pyth ...
- 二十四、MySQL ALTER命令
MySQL ALTER命令 当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令. 开始本章教程前让我们先创建一张表,表名为:testalter_tbl. root@ho ...
- Mysql忘记密码找回步骤
Mysql密码忘记找回步骤: 1.首先停止数据库 [root@localhost ~]# /etc/init.d/mysqld stop 2.使用--skip-grant-tables启动mysql, ...
- JZOJ 3493. 【NOIP2013模拟联考13】三角形
3493. [NOIP2013模拟联考13]三角形(triangle) (File IO): input:triangle.in output:triangle.out Time Limits: 10 ...
- Essential C++ 3.1 节的代码练习——指针方式
// // PointerToValue.cpp // Working // // Created by Hawkins, Dakota Y on 6/3/16. // Copyright 2016 ...
- Tomcat 在 Linux 下的自动启动脚本
很多服务都需要设置为开机自启动.将下面代码复制到 /etc/rc.d/init.d/tomcat ,然后执行 chkconfig –add tomcat chkconfig tomcat on 就可以 ...
- Git-GIt检出
实际上在执行重置命令的时候没有使用任何参数对所要重置的分支名进行设置,这是因为重置命名实际上所针对的是头指针HEAD.之所以没有改变HEAD的内容是因为HEAD指向了一个引用refs/heads/ma ...
- 《鸟哥的Linux私房菜》学习笔记(5)——权限管理
一.权限的基本概念 权限:访问计算机资源或服务的访问能力. Linux中,每一个资源或者服务的权限, ...