快速合并集合,查询两个元素是否属于同一个集合
用字符串读单个字符 可以避免踩坑(比如某些地方多了空格 %c会读 %s就会自动忽略)
C++ 代码
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10;
int n,m;
int p[N];//x的父亲结点是p[x]
int find(int x)//返回x的祖宗结点 + 路径压缩
{
if(x!=p[x])
p[x] = find(p[x]);
return p[x];
}
int main()
{
cin>>n>>m;
for (int i = 1; i <= n;i++)
p[i] = i;
while(m--){
int a, b;
char op[2];//明明一个字母,为什么一个char 就不行?
scanf("%s%d%d", &op, &a, &b);
if(op[0]=='M')
p[find(a)] = find(b);
else {
if(find(a)==find(b))
puts("Yes");
else
puts("No");
}
}
system("pause");
return 0;
}