给个思路呗,不知道这题什么路子,下面是同学写的代码,看不太懂,可以的话写一下关键代码
#include
using namespace std;
const long long N = 2e3 + 10;
long long t, n, m;
long long fa[N * 2], f;
long long ff(long long x) { return x == fa[x] ? x : fa[x] = ff(fa[x]); }
int main() {
//freopen("in.txt","r",stdin);
scanf("%lld", &t);
while (t--) {
f = 0;
scanf("%lld%lld", &n, &m);
for (long long i = 1; i <= 2 * n; i++) { fa[i] = i; }
while (m--) {
long long x, y;
char s[10]={0};
scanf("%lld%lld%s", &x, &y, s);
if (f == 1)continue;
if (s[0] == 'n') {
long long X = ff(x), Y = ff(y);
long long XX = ff(x + n), YY = ff(y + n);
if (X == Y) {
f = 1;
continue;
}
fa[X] = YY;
fa[XX] = Y;
} else {
long long X = ff(x), Y = ff(y);
long long XX = ff(x + n), YY = ff(y + n);
if (X == YY) {
f = 1;
continue;
}
fa[X] = Y;
fa[XX] = YY;
}
}
if (f)puts("Yes");
else puts("No");
}
getchar();getchar();
}