题目大意:有两个帮派,N个人,现在有M个操作
A u v:表示询问,问u和v是不是属于同一个帮派的
D u v:表示u和v是在不同的帮派的

解题思路:带权并查集,刚开始都初始化为0,剩下的操作就是带权并查集模版了
如果u和v到根的权值不同的话,表示两个人帮派不同,如果相同的话,就表示帮派相同了

#include <cstdio>
#include <cstring>
const int N = 100010;

int n, m;
int f[N], r[N];

void init() {
    for (int i = 1; i <= n; i++) {
        f[i] = i; 
        r[i] = 0;
    }
}

int find(int x) {
    if (x == f[x]) return x;
    int t = find(f[x]);
    r[x] = (r[x] + r[f[x]]) % 2;
    return f[x] = t;
}

void solve() {
    char str[10];
    int x, y;
    while (m--) {
        scanf("%s%d%d", str, &x, &y);
        int tx = find(x);
        int ty = find(y);
        if (str[0] == 'A') {
            if (tx != ty) {
                printf("Not sure yet.\n");
            }
            else if (r[x] != r[y]) {
                printf("In different gangs.\n");
            }
            else 
                printf("In the same gang.\n");
        }
        else {
            f[tx] = ty;
            r[tx] = (-r[x] + 1 + r[y] + 2) % 2;
        }
    }
}

int main() {
    int test;
    scanf("%d", &test);
    while (test--) {
        scanf("%d%d", &n, &m);
        init();
        solve();
    }
    return 0;
}