并查集
时间限制:1秒 内存限制:256M
【问题描述】
\(n\) 个不同元素分布在若干个互不相交的集合中,需要进行以下 3 个操作:
1.合并两个集合(Merge)。
2.查询元素所在的集合(Find)。
3.查询两个元素是否属于同一个集合(Judge)。
请你设计一种数据结构,支持上面三种操作,并且时间效率尽量的高。
【输入格式】
第 1 行一个整数 \(n\),表示有 \(n\) 个不同元素组成的 \(n\) 个集合:\({1}、{2}、…、{n}\)。
第 2 行一个整数 \(m\),表示有 \(m\) 个操作。
接下来的 \(m\) 行,每行一个操作,格式如下:
Merge \(x\) \(y\):表示合并 \(x\) 和 \(y\) 所在的两个集合,如果他们已经在同一个集合,则忽略这个操作。
Judge \(x\) \(y\):表示查询 \(x\) 和 \(y\) 是否在同一个集合中,如果在同一个集合,就输出Yes,否则输出No。
以上操作中的 \(x,y\) 均满足 \(1≤x,y≤n\)。
【输出格式】
输出每个 Judge 的结果。
【输入输出样例1】
Input
6
10
Merge 1 2
Judge 1 3
Judge 1 2
Merge 2 5
Merge 3 6
Judge 1 5
Judge 3 2
Merge 2 6
Judge 1 5
Judge 4 5
Output
No
Yes
Yes
No
Yes
No
【数据说明】
对于 \(100\%\) 的数据,\(0<n,m≤300000\)。
【来源】
Mr.he