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

输入格式:

输入的第一行给出正整数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

分析:并查集。先写好init、findFather、Union。
0. 每个社交圈的结点号是人的编号,而不是课程。课程是用来判断是否处在一个社交圈的。
1. course[t]表示任意一个喜欢t活动的人的编号。如果当前的课程t,之前并没有人喜欢过,那么就course[t] = i,i为它自己的编号,表示i为喜欢course[t]的一个人的编号
2. course[t]是喜欢t活动的人的编号,那么findFather(course[t])就是喜欢这个活动的人所处的社交圈子的根结点,合并根结点和当前人的编号的结点i。即Union(i, findFather(course[t])),把它们处在同一个社交圈子里面
3. isRoot[i]表示编号i的人是不是它自己社交圈子的根结点,如果等于0表示不是根结点,如果不等于0,每次标记isRoot[findFather(i)]++,那么isRoot保存的就是如果当前是根结点,那么这个社交圈里面的总人数
4. isRoot中不为0的编号的个数cnt就是社交圈圈子的个数
5. 把isRoot从大到小排列,输出前cnt个,就是社交圈人数的从大到小的输出顺序

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> father, isRoot;
int cmp1(int a, int b){return a > b;
}
int findFather(int x) {int a = x;while(x != father[x])x = father[x];while(a != father[a]) {int z = a;a = father[a];father[z] = x;}return x;
}
void Union(int a, int b) {int faA = findFather(a);int faB = findFather(b);if(faA != faB)father[faA] = faB;
}
int main() {int n, k, t, cnt = 0;int course[1001] = {0};scanf("%d", &n);father.resize(n + 1);isRoot.resize(n + 1);for(int i = 1; i <= n; i++)father[i] = i;for(int i = 1; i <= n; i++) {scanf("%d:", &k);for(int j = 0; j < k; j++) {scanf("%d", &t);if(course[t] == 0)course[t] = i;Union(i, findFather(course[t]));}}for(int i = 1; i <= n; i++)isRoot[findFather(i)]++;for(int i = 1; i <= n; i++) {if(isRoot[i] != 0)cnt++;}printf("%d\n", cnt);sort(isRoot.begin(), isRoot.end(), cmp1);for(int i = 0; i < cnt; i++) {printf("%d", isRoot[i]);if(i != cnt - 1) printf(" ");}return 0;
}

L3-003. 社交集群-PAT团体程序设计天梯赛GPLT(并查集)相关推荐

  1. L2-005 集合相似度-PAT团体程序设计天梯赛GPLT

    题目来源:团体程序设计天梯赛-练习集 题目地址:L2-005 集合相似度 题目大意 给定 nnn 个集合,然后有 kkk 次询问,每次询问都要求出 Nc/Nt×100%N_c / N_t \times ...

  2. L2-010. 排座位-PAT团体程序设计天梯赛GPLT(并查集)

    布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位.无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席. 输入格式: ...

  3. L2-007. 家庭房产-PAT团体程序设计天梯赛GPLT

    给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(<=1000),随后N行,每行按下列格式给出一个人的房产: ...

  4. L3-011 直捣黄龙 (30 分)-PAT 团体程序设计天梯赛 GPLT

    本题是一部战争大片 -- 你需要从己方大本营出发,一路攻城略地杀到敌方大本营.首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营.当这样的路径不唯一时,要求选择可以沿途解放最多城镇 ...

  5. [Python] L1-056 猜数字-PAT团体程序设计天梯赛GPLT

    一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢.本题就要求你找出其中的赢家. 输入格式: 输入在第一行给出一个正整数N(<= 10^4^).随后 N 行,每行给 ...

  6. [Python] L1-031. 到底是不是太胖了-PAT团体程序设计天梯赛GPLT

    据说一个人的标准体重应该是其身高(单位:厘米)减去100.再乘以0.9所得到的公斤数.真实体重与标准体重误差在10%以内都是完美身材(即 |真实体重-标准体重| < 标准体重x10%).已知市斤 ...

  7. [Python] L1-005. 考试座位号-PAT团体程序设计天梯赛GPLT

    L1-005. 考试座位号 每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号 ...

  8. L2-027 名人堂与代金券-PAT团体程序设计天梯赛GPLT

    对于在中国大学MOOC学习"数据结构"课程的学生,想要获得一张合格证书,总评成绩必须达到 60 分及以上,并且有另加福利:总评分在 [G, 100] 区间内者,可以得到 50 元 ...

  9. L1-056 猜数字-PAT团体程序设计天梯赛GPLT

    一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢.本题就要求你找出其中的赢家. 输入格式: 输入在第一行给出一个正整数N(<= 10^4^).随后 N 行,每行给 ...

最新文章

  1. pyspark导出文件
  2. Keil进入仿真,窗口不显示程序运行箭头
  3. 温州大学《机器学习》课程代码(四)朴素贝叶斯
  4. 经典C语言程序100例之二四
  5. 【测试点分析】1104 Sum of Number Segments (20 分)
  6. 多线程-单生产单消费模型
  7. python中组合框_如何从SQL填充组合框数据?使用Python
  8. 2017.5.8 文化之旅 思考记录
  9. 华为:2021数字化转型,从战略到执行.pdf(附103页pdf下载链接)
  10. 水晶报表中对某一栏位值进行处理_从主流报表工具的报价看报表行业的报价水深-----常用报表工具对比---主流报表价格对比...
  11. 云痕大数据 家长登录_智学网家长学生查分入口:www.zhixue.com
  12. 【代码笔记】iOS-账号,密码记住
  13. 如何计算某一天是星期几?—— 蔡勒(Zeller)公式
  14. IT基础架构现代化,未来企业的“标配”是什么?
  15. 联系人管理-添加/修改/删除联系人/条件查询/解决与客户之间的问题| CRM客户关系管理系统项目实战五(Struts2+Spring+Hibernate)解析+源代码
  16. AcWing237. 程序自动分析
  17. 微信公众号unionid问题
  18. Android 各版本对应的SDK版本
  19. 初学VUE.js之数据绑定
  20. php 百度天气接口api接口,PHP调用百度天气接口API实现查询实时天气

热门文章

  1. js中获取 table节点各tr及td的内容方法
  2. ssh整合步骤之一(搭建环境)
  3. gradle-学习笔记(2)-多项目构建
  4. Linux学习笔记(PATH,cp,mv,文档查看cat/more/less/head/tail)
  5. (MYSQL) Unknown table 'a' in MULTI DELETE的解决办法
  6. Linux 下查看系统是32位还是64位的方法
  7. 堪比“震网”:罗克韦尔PLC严重漏洞可导致攻击者在系统中植入恶意代码
  8. PrinterLogic 厂商修复影响所有联网端点的3个RCE漏洞
  9. 猎洞高手Orange Tsai 亲自讲解 ProxyShell write-up
  10. 中秋逢国庆 | 盛世华诞 阖家团圆