天梯赛L2-024 部落

题目详情:



输入样例:

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

思路:

很明显的并查集的一道题目,不了解并查集的小伙伴,去下面看链接看一个大佬写得并查集,超级牛的。
1、这个题目是怎么回事呢?意思也很简单:就是说,现在有好多个人,分成了好几个小圈子,这些小圈子,又可以组成一个大圈子,即部落。现在给你,这些小圈子的信息,问你一共有多少个人,以及多少个部落。

2、不同的部落之间,人都是互相不认识的。
同一个部落内,a和b认识,b和c认识,但a和c不认识,这种情况也是出现的,即同一个部落的两个人可能不认识,但是他们一定认识相同的人。这不就恰好符合并查集的条件了。这个题目还要求一共又多少人,用set容器就可以轻松解决,有几个部落的话,就看有几个根节点就可以了。

3、但是这个题目还要进行压缩路径,因为如果不压缩路径的话就会超时。
压缩路径的意思也很简单:比如一个部落里a是老大,b是a的直系小弟,c是b的直系小弟,如果我们想通过a找到c的话,我们需要a去找b,b再去找c,那么如果我们压缩了路径,就是让c变成a的直系小弟,这个样子我们就不用通过b找到c,就节省了时间。

4、并查集的三大步骤:
1、前驱数组pre[]{一定要先初始化!!! }
2、查找相同结点的函数find(){ 可能要压缩路径 }
3、合并函数Union()

详细代码:

#include<bits/stdc++.h>
using namespace std;const int maxn = 10000 + 5;
int pre[maxn], temp[maxn];//并查集的前驱节点数组,临时存变量的数组
int find(int x)//并查集-查:找根节点(压缩路径版:即每个节点的父节点就是根节点)
{if( x == pre[x])return x;return pre[x] = find(pre[x]);//让x直接变成老大的直系小弟//直接递归不理解的话,看下面的扩展的代码/*int y = x;//先把x赋给ywhile(x != pre[x])//找到x的根节点x = pre[x];while(y != pre[y])//压缩路径{int z = y;//把y赋给zy = pre[y];//求y的前驱节点,进行下一步循环pre[z] = x;//令z的前驱节点为x(此时x为x的根节点)}//这个过程什么意思呢:就是现在的z就是开始的x,为了找x的根节点,需要先找x的父节点,再找x父节点的父节点...//直到找到根节点,那么现在就将x的前驱节点(即父节点)直接变为x的根节点,从而压缩了路径 return x;*/}
void Union(int x,int y)//并查集-并:合并两个节点的根节点
{int fx = find(x);int fy = find(y);if(fx < fy)//本题可以将最大的数作为根节点pre[fx] = fy;if(fy < fx)pre[fy] = fx;
}
int n, k, q;
set<int>num;//用于存一共有多少个人
int main()
{for(int i=0; i<maxn; i++)//并查集-初始化前驱数组{pre[i] = i;}cin>>n;for(int i=0; i<n; i++){cin>>k;for(int j=0; j<k; j++){int x;cin>>x;temp[j] = x;num.insert(x);if(j>0)Union(temp[j],temp[j-1]);}}int num1 = 0;for(int i=1; i<=num.size(); i++)//求部落数{if( i == find(i))//就看有多少i就是根节点,那么就有几个部落num1++;}cout<<num.size()<<" "<<num1<<endl;cin>>q;for(int i=0; i<q; i++){int x,y;cin>>x>>y;if(find(x) == find(y))//原来是这里写错了,写成pre[x] == pre[y],这个肯定是不对的,因为x和y的前驱节点和根节点是不一样的概念cout<<"Y\n";elsecout<<"N\n";}
}

知识总结:

并查集的链接:https://www.cnblogs.com/xzxl/p/7226557.html

【L2-024 部落】天梯赛L2系列详解相关推荐

  1. 天梯赛基础题型详解(2019 - 08 - 12)

    A.枚举 (1) 详解:用枚举法,从最开始的只有一层沙漏开始枚举,直至找到一个沙漏所用符号的总和小于等于输入的数(将每一次不同层数的沙漏的符号和都用数组储存起来),然后标记那个最大的和.要注意的是每增 ...

  2. 团体程序设计天梯赛-L2组

    团体程序设计天梯赛-L2组 -------------------------------------------------------------------------------- 题目传送门 ...

  3. 最新NVIDIA Ada Lovelace架构 和 RTX 40系列详解

    最新NVIDIA Ada Lovelace架构 和 RTX 40系列详解 Nvidia 的 Ada 架构和 GeForce RTX 40 系列显卡计划于 10 月 12 日开始到货,从 GeForce ...

  4. 2021年 第12届 蓝桥杯 第4次模拟赛真题详解及小结【Java版】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  5. 2021年 第12届 蓝桥杯 第3次模拟赛真题详解及小结【Java版】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  6. 2020年 第11届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2020.7.5】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...

  7. 2020年 第11届 蓝桥杯 Java C组 省赛真题详解及小结【第1场省赛 2020.7.5】

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

  8. 2020年 第11届 蓝桥杯 C/C++ B组 省赛真题详解及小结【第1场省赛2020.7.5】【Java版】

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

  9. 2020年 第11届 蓝桥杯 第2次模拟赛真题详解及小结【Java版】

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

  10. 2019年 第10届 蓝桥杯 Java B组 省赛真题详解及总结

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

最新文章

  1. celery源码分析-worker初始化分析(下)
  2. php更新点击数,始终如一的坚守,PHP对数据更新的更优解
  3. 浅析 SpringMVC 中返回对象的循环引用问题
  4. 变量在内存中的值[c][code]
  5. 一分钟读懂java的super关键字
  6. python运行报错_请教大神python运行书上源码报错,请指点,谢谢
  7. It's hard to say goodbye, everyone.
  8. 用python玩转数据第三周_《用Python玩转数据》-03 数据获取与表示
  9. linux 与 windows操作系统的区别
  10. 有什么计算机应用基础的app,计算机应用基础软件
  11. Eclipse使用教程
  12. ASP.NET快速入门
  13. Python绘图实例35:漫天雪花绘制
  14. 麦客达温德姆酒店品牌在中国首次亮相
  15. 三菱转以太网模块连接 FX3U/3UC系列 PLC使用步骤
  16. 从校训、企业文化到团队文化
  17. c语言中类似于大括号的符号,大括号符号 c语言大括号的用法
  18. Python 常用函数(自用)
  19. 机械精度设计与检测|几何精度
  20. 求一个数的质因数个数

热门文章

  1. 学习笔记(01):华为工程师,带你实战C++视频精讲-Day1王桂林老师原创视频-C到C++类型安全增强...
  2. 东软成都java培训只有两个月_我来为东软说句公道话!【不喜勿喷】
  3. 微营销怎么做才有效?
  4. 《信息安全保障》一2.2 我国信息安全保障工作主要内容
  5. eclipse 设置豆沙绿
  6. Swagger2时启动控制台输出大量 Generating unique operation named
  7. the specified jre installation does not exist 不存在指定的JRE安装
  8. 家长如何挑选学生护眼台灯?2023选这样的台灯更护眼
  9. SG600城市智能灯杆网关+云平台解决方案
  10. 扑克牌问题之比较大小(JAVA)