並查集
我們將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;
}