#include<iostream>
using namespace std;
int pre[1000];
int find(int x)
{
int r = x;
while (pre[r] != r)
r = pre[r];
int i = x, j;
while (i != r)
{
j = pre[i];
pre[i] = r;
i = j;
}
return r;
}
void join(int x, int y)
{
int fx = find(x), fy = find(y);
if (fx != fy)
pre[fx] = fy;
}
int main() {
int m, n;
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
pre[i] = i;
}
int a [100000], b[100000];
char QM [100000];
for (int i = 0; i < m; i++) {
cin >> QM[i] >> a[i] >> b[i];
}
for (int i = 0; i < m; i++) {
if (QM[i] == 'Q') {
find(a[i]), find(b[i]);
if (find(a[i]) != find(b[i]))
cout << "No";
else
cout << "Yes";
cout << endl;
}
else if (QM[i] == 'M') {
join(a[i], b[i]);
}
}
return 0;
}
哪里堆栈溢出