并查集
我们将a的敌人定义为a+n,b的敌人的定义为b+n,所以a与b+n是一类人,b与a+n是一类人,然后就这么合并就好了
代码
//By AcerMo
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=2050;
int n,m;
int siz[M],fa[M];
inline int read()
{
int x=0;char ch=getchar();
while (ch>'9'||ch<'0') ch=getchar();
while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
return x;
}
inline int find(int x)
{
if (x!=fa[x]) return fa[x]=find(fa[x]);
return x;
}
inline void constt()
{
for (int i=1;i<=n*2;i++)
fa[i]=i,siz[i]=1;
return ;
}
signed main()
{
n=read();m=read();constt();
while (m--)
{
char ch[3];scanf("%s",ch);
int x=read(),y=read();
int r1=find(x),r2=find(y);
if (ch[0]=='E')
{
int r3=find(x+n);
int r4=find(y+n);
fa[r3]=r2;fa[r4]=r1;
}
else fa[r1]=r2;
}
int cnt=0;
for (int i=1;i<=n;i++)
if (find(i)==i) cnt++;
cout<<cnt;
return 0;
}