#include <iostream> using namespace std; #define MAX 2001 int g_nFriend[MAX] = {0}; int g_nEnemy[MAX] = {0}; void InitData(const int& nPeople); int CalcGroup(const int& nPeople, int nMsg); void Comb(int x, int y); int FindRoot(const int& x); int main() { int nPeople = 0, nMsg = 0; cin >>nPeople >>nMsg; InitData(nPeople); cout <<CalcGroup(nPeople, nMsg); return 0; } void InitData(const int& nPeople) { for (int i = 0; i <= nPeople; ++i) { g_nFriend[i] = g_nEnemy[i] = i; } } int CalcGroup(const int& nPeople, int nMsg) { char nRela = 0; int x = 0, y = 0; while (nMsg--) { cin >>nRela >>x >>y; if (nRela == 'F') { Comb(x, y); } else { if (g_nEnemy[x] == x) { g_nEnemy[x] = y; } else { Comb(g_nEnemy[x], y); } if (g_nEnemy[y] == y) { g_nEnemy[y] = x; } else { Comb(g_nEnemy[y], x); } } } int nGroup = 0; for (int i = 1; i <= nPeople; ++i) { if (g_nFriend[i] == i) ++nGroup; } return nGroup; } void Comb(int x, int y) { x = FindRoot(x); y = FindRoot(y); g_nFriend[x] = y; } int FindRoot(const int& x) { if (g_nFriend[x] != x) { g_nFriend[x] = FindRoot(g_nFriend[x]); } return g_nFriend[x]; } /************************************************************** Problem: 2243 User: admin Language: C++ Result: Accepted Time:61 ms Memory:2088 kb ****************************************************************/