立志用最简洁的代码做最高效的表达


在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈。我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?并且检查任意两个人是否属于同一个部落。

输入格式:
输入在第一行给出一个正整数N(<= 104),是已知小圈子的个数。随后N行,每行按下列格式给出一个小圈子里的人:
K P[1] P[2] … P[K]
其中K是小圈子里的人数,P[i](i=1, …, K)是小圈子里每个人的编号。这里所有人的编号从1开始连续编号,最大编号不会超过104
之后一行给出一个非负整数Q(<= 104),是查询次数。随后Q行,每行给出一对被查询的人的编号。

输出格式:
首先在一行中输出这个社区的总人数、以及互不相交的部落的个数。随后对每一次查询,如果他们属于同一个部落,则在一行中输出“Y”,否则输出“N”。

输入样例:
4
3 10 1 2
2 3 4
4 1 5 7 8
3 9 6 4
2
10 5
3 7

输出样例:
10 2
Y
N


并查集模板题。

注意:路径压缩时要区分大小,即第17-18行代码,否则会出现树退化成链表的情况。


#include<iostream>
#include<cstdio>
using namespace std;const int maxn = 10010;
int pre[maxn] = {0}, vis[maxn] = {0}; //并查集数组,查询总人数数组 int find_(int x) {while(x != pre[x])x = pre[x];return x;
}void merge(int x, int y) {x = find_(x);y = find_(y);if(y > x) pre[y] = x;    //区分大小, 防止树退化为链 else pre[x] = y;
}int main() { //第一部分 ios::sync_with_stdio(false);int sum_p = 0, sum_g = 0;    //人总数,圈子总数。for(int i = 1; i < maxn; i++) pre[i] = i;  //初始化并查集 int n; cin >> n;for(int i = 0; i < n; i++) {int m; cin >> m;int x; cin >> x; m--;  //先输入一个 if(vis[x] == 0) { sum_p++; vis[x] = 1; } for(int i = 0; i < m; i++) {int y; cin >> y;if(vis[y] == 0) { sum_p++; vis[y] = 1; }merge(x, y);y = x;} }//第二部分 for(int i = 1; i < maxn; i++) {   //计算圈子数量 if(pre[i] == i) {sum_g++;}}//这里的sum_g是包括初始化节点的个数,一共初始化了10009个节点,要用人数相减才可以。cout << sum_p << ' ' << sum_p-(10009-sum_g) << '\n'; int k; cin >> k;for(int i = 0; i < k; i++) {int x, y; cin >> x >> y;x = find_(x);y = find_(y);cout << (x==y ? "Y\n" : "N\n");}return 0;
}

耗时


      ——只有一种英雄主义,就是在认清生活的本质后仍然热爱生活

【测试点4】基础实验4-2.8 部落 (25 分)相关推荐

  1. 数据结构PTA习题:基础实验4-2.7 修理牧场 (25分)

    基础实验4-2.7 修理牧场 (25分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L​i​​个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L ...

  2. 数据结构PTA习题:基础实验7-2.3 德才论 (25分)——排序

    基础实验7-2.3 德才论 (25分) 宋代史学家司马光在<资治通鉴>中有一段著名的"德才论":"是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜 ...

  3. 基础实验6-2.3 拯救007 (25分) [浙大版《数据结构学习与实验指导(第2版)》]

    题目连接:基础实验6-2.3 拯救007 (25分) 在老电影"007之生死关头"(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一 ...

  4. 【两种方法】基础实验4-2.7 修理牧场 (25 分)

    立志用最少的代码做最高效的表达 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L​i个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li的总和. 但 ...

  5. 7-13 部落 (25 分)

    在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈.我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?并且检查任意两个人是否属于同 ...

  6. C++学习之路 | PTA(天梯赛)—— L2-024 部落 (25分)(带注释)(并查集)(精简)

    L2-024 部落 (25分) 在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈.我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部 ...

  7. 【CCCC】L2-024 部落 (25分),,并查集,模板水题,统计集合个数

    problem L2-024 部落 (25分) 在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈.我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多 ...

  8. 【详细解析】基础实验4-2.6 目录树 (30 分)

    立志用最少的代码做最高效的表达 在ZIP归档文件中,保留着所有压缩文件和目录的相对路径和名称.当使用WinZIP等GUI软件打开ZIP归档文件时,可以从这些信息中重建目录的树状结构.请编写程序实现目录 ...

  9. 【测试点0分析】1009 Product of Polynomials (25 分)

    立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 This time, you are supposed to find A×B where A and B are two pol ...

最新文章

  1. 大学计算机数学基础2,大学计算机基础(第2版)
  2. windows python3.2 shell环境(python叫做解释器)
  3. 浅谈C++类(1)--概念和构造函数
  4. java流与文件——java生成解压缩文件(夹)
  5. 深度学习stride_深度强化学习成名作——DQN
  6. 曝张一鸣在游戏群批员工上班时聊游戏,遭回怼:那你退群啊
  7. gtihub第二次上传项目_国道岱山项目双合大桥墩柱桩基打桩施工突破100根
  8. 查看系统中支持CUDA的设备数量和属性---deviceQuery示例
  9. 外边距合并(HTML、CSS)
  10. python创建字典
  11. mysql mysqlhotcopy_mysql中mysqlhotcopy备份数据库总结
  12. 阿里云云计算 50 云监控的使用
  13. 计算机二级ms通过率,计算机二级office通过率高吗
  14. 【YOLOV5-5.x 源码解读】datasets.py
  15. wps合并重复项并求和_wps中在同一张表格中怎么将相同项合并并求和
  16. pta算法:计算天数
  17. [linux] 命令
  18. 黑盒测试五大测试阶段
  19. mysql 导入tsv文件_HBase数据迁移(2)- 使用bulk load 工具从TSV文件中导入数据
  20. 类加载器以及双亲委派模式

热门文章

  1. scrapy 设置随机UA
  2. MySQL数据库的内连接,左外连接和右外连接查询
  3. Easy Tech:什么是I帧、P帧和B帧?
  4. 基于主观感兴趣区域的视频编码实践
  5. 大牛书单 | 数据库专题好书分享
  6. 腾讯安全平台部专家研究员胡育辉:千亿黑产背后的破局之道
  7. 使用Chrome打开http://www.cutv.com/demo/live_test.swf页面时swf文件自动下载问题
  8. Android编译工具Freeline的使用
  9. 系统测试分类和测试常用方法
  10. Vue全家桶实战02_【从入门到放弃系列】