并查集
前言:
今日浅浅地玩了一下刺客信条奥赛德,总结还不错。不闹了,让我来介绍一下今天的主角并查集
$ 概述:
并查集还是很神奇的,常常地用在处理两个集合问题,例如两集合的关系。
并查集有三大核心步骤–初始化、寻找根部、合并,可以当成解题模板使用
初始化即先将每一个元素的祖宗设为自己。
1 | for(int i;i<=n;i++) |
寻找根部,找到该元素的祖宗。
1 | int find(int x) |
合并就是将两个元素或者两个集合进行合并,将一方的根节点连接到另一方的根节点,进行认祖归宗。
1 | f[find(a)]=find(b); |
简单地介绍了一下并查集,现在我们开始实战环节。
实战
题目:并查集
如题,现在有一个并查集,你需要完成合并和查询操作。
第一行包含两个整数 N,M
,表示共有 N
个元素和 M
个操作。
接下来 M
行,每行包含三个整数 Z_i,X_i,Y_i
。
当 Z_i=1
时,将 X_i
与 Y_i
所在的集合合并。
当 Z_i=2
时,输出 X_i
与 Y_i
是否在同一集合内,是的输出 Y
;否则输出 N
。
1 | #include <bits/stdc++.h> |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 大黄的博客!