60pts
#include <bits/stdc++.h>
using namespace std;
int n, m, ans, f[1010], en[1010];
int find(int a) {
if (f[a] == a) return a;
else return f[a] = find(f[a]);
}
void hb(int x, int y) {
if (find(x) == find(y)) return;
f[find(y)] = find(x);
return;
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i ++) f[i] = i;
for (int i = 1, x, y; i <= m; i ++) {
char op;
cin >> op;
scanf("%d%d", &x, &y);
if (op == 'F') {
hb(x, y);
}
else {
if (en[x] == 0) en[x] == find(y);
else hb(en[x], y);
if (en[y] == 0) en[y] == find(x);
else hb(en[y], x);
}
}
for (int i = 1; i <= n; i ++) {
if (find(i) == i) ans ++;
}
printf("%d", ans);
return 0;
}
AC
#include <bits/stdc++.h>
using namespace std;
int n, m, ans, f[2020], en[2020][2020];
int find(int a) {
if (f[a] == a) return a;
else return f[a] = find(f[a]);
}
void hb(int x, int y) {
f[find(y)] = find(x);
return;
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n * 2; i ++) f[i] = i;
for (int i = 1, x, y; i <= m; i ++) {
char op;
cin >> op;
scanf("%d%d", &x, &y);
if (op == 'F') {
hb(x, y);
}
else {
en[x][y] = en[y][x] = 1;
for (int i = 1; i <= n; i ++) {
if (en[x][i]) hb(y, i);
if (en[y][i]) hb(x, i);
}
}
}
for (int i = 1; i <= n; i ++) {
if (find(i) == i) ans ++;
}
printf("%d", ans);
return 0;
}