C++堆栈溢出怎么解决


#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;
}

哪里堆栈溢出