#include <stdio.h> #include <stdlib.h> #include <string.h> int f[5000]; char p[10]; int find(int v){ if(f[v]==v)return v; int F = find(f[v]); f[v] = F; return F; } void union1(int x, int y){ x = find(x); y = find(y); f[x] = y; } int main() { int n, m, z, k = 0; while(scanf("%d%d",&n,&m) != EOF){ for(int i = 1;i <= 2 * n; i++){ f[i] = i; } for(int i = 1;i <= m; i++){ int x, y; scanf("%s %d %d",p,&x,&y); if(p[0] == 'F'){ union1(x, y); } else { union1(x, y + n); union1(y, x + n); } } for(int i = 1;i <= n; i++){ f[i] = find(i); } for(int i = 1;i < n; i++){ for(int j = 1;j <= n - i; j++){ if(f[j] > f[j + 1]){ z = f[j]; f[j] = f[j + 1]; f[j + 1] = z; } } } for(int i = 1;i <= n; i++){ if(f[i] != f[i - 1])k++; } printf("%d\n",k); } return 0; } /************************************************************** Problem: 2243 User: admin Language: C Result: Accepted Time:67 ms Memory:1164 kb ****************************************************************/