题意:有n个人和两个阵营,给出两种操作,A a b ,询问a和b的是否在同一个阵营,如果有人未加入任何阵营输入不确定。D a b,让a和b成为不同阵营的。
题解:两种做法。
一种是把并查集扩大一倍,先给每个人一个假定的敌人,然后有D操作时把敌人加入到假定敌人的集合中,A操作判断a和b是否在同一个集合,如果不在判断对方是否在自己假定敌人的集合中,在就是敌人,否则是不确定。
#include <stdio.h>
#include <string.h>
const int N = 100005;
char str[5];
int n, m, pa[N];
int get_parent(int x) {
return x == pa[x] ? x : pa[x] = get_parent(pa[x]);
}
int main() {
int t;
scanf("%d", &t);
while (t--) {
scanf("%d%d", &n, &m);
int nn = 2 * n;
for (