
P3367 【模板】并查集(并查集)
发布日期:2021-05-08 21:49:44
浏览次数:14
分类:精选文章
本文共 933 字,大约阅读时间需要 3 分钟。
【模板】并查集
题目描述 如题,现在有一个并查集,你需要完成合并和查询操作。输入格式
第一行包含两个整数 N,M ,表示共有 N 个元素和 M 个操作。接下来M 行,每行包含三个整数Zi,Xi,Yi。
当Zi=1 时,将Xi与Yi所在的集合合并。
当Zi=2 时,输出Xi与Yi是否在同一集合内,是的输出 Y ;否则输出 N 。
输出格式
对于每一个Zi=2 的操作,都有一行输出,每行包含一个大写字母,为 Y 或者 N 。输入输出样例
输入 4 7 2 1 2 1 1 2 2 1 2 1 3 4 2 1 4 1 2 3 2 1 4 输出 N Y N Y 说明/提示 对于30% 的数据,N≤10,M≤20。对于 70% 的数据,N≤100,M≤103。
对于100% 的数据,1≤N≤104,1≤M≤2×104。
正解做了这么多到并查集的题目了 应该还有人不知道并查集什么吧 现在,我来讲讲并查集是什么
并查集 并就是合并 查就是查找 集就是集合 总而言之:合并集合,查找集合 为了方便将两个数字的集合合并 为了方便判断两个数字是否属于同一集合 就有了并查集这道题,就是一个并查集模板(大家要学好并查集,以后有大作用哦)
AC代码#include#include using namespace std;int n,m,z,x,y,pre[10005];int find(int x)//找爸爸+路径压缩{ if(pre[x]==0)return x; return pre[x]=find(pre[x]);}void bcj(int x,int y)//并查集{ int x1=find(x),y1=find(y);//找爸爸 if(x1!=y1)pre[y1]=x1;//合并}int main(){ cin>>n>>m; for(int i=1;i<=m;i++) { cin>>z>>x>>y; if(z==1)bcj(x,y);//如果z==1就合并集合,否则就判断集合是否一样 else if(find(x)==find(y))cout<<"Y"<
谢谢观看
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月23日 20时13分00秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
网站故障公告1:使用阿里云RDS之后一个让人欲哭无泪的下午
2021-05-09
上周热点回顾(12.31-1.6)
2021-05-09
上周热点回顾(1.21-1.27)
2021-05-09
上周热点回顾(6.3-6.9)
2021-05-09
上周热点回顾(8.12-8.18)
2021-05-09
【故障公告】升级阿里云 RDS SQL Server 实例故障经过
2021-05-09
蹒跚来迟:新版博客后台上线公测
2021-05-09
上周热点回顾(9.16-9.22)
2021-05-09
上周热点回顾(11.4-11.10)
2021-05-09
[网站公告]11月26日00:00-04:00阿里云RDS升级
2021-05-09
[网站公告]又拍云API故障造成图片无法上传(已恢复)
2021-05-09
上周热点回顾(12.16-12.22)
2021-05-09
云计算之路-阿里云上:对“黑色30秒”问题的猜想
2021-05-09
云计算之路-阿里云上:“黑色30秒”走了,“黑色1秒”来了,真相也许大白了
2021-05-09
云计算之路-阿里云上:奇怪的CPU 100%问题
2021-05-09
云计算之路-阿里云上:2014年6月12日12点IIS请求到达量突降
2021-05-09
上周热点回顾(6.9-6.15)
2021-05-09
上周热点回顾(6.16-6.22)
2021-05-09
上周热点回顾(6.23-6.29)
2021-05-09
上周热点回顾(10.20-10.26)
2021-05-09