原题链接
题解

code
#include<bits/stdc++.h>
using namespace std;
int fa[1005];
int finds(int now)
{
return fa[now]=(now==fa[now]?now:finds(fa[now]));
}
vector<int> G[1005];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=1;i<=m;i++)
{
int x,y;
char op;
cin>>op>>x>>y;
if(op=='E')
{
G[x].push_back(y);
G[y].push_back(x);
}
else fa[finds(x)]=finds(y);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<G[i].size();j++)
{
int next=G[i][j];
fa[finds(next)]=finds(G[i][0]);
}
}
int ans=0;
for(int i=1;i<=n;i++)
if(finds(i)==i)ans++;//如何统计集合个数?统计首领个数!
cout<<ans<<endl;
return 0;
}