编译器#2点过了 评测机没过 求调
#include <iostream>
using namespace std;
int n,m;
char opt;
int c1,c2;
int ans;
int fa[1000005];
int fa2[1000005];
int cnt[1000005];
inline int read()
{
int x=0;int f =1;
char ch=getchar();
while('0'>ch||ch>'9')
{
if(ch=='-')
{
f = -1;
}
ch = getchar();
}
while('0'<=ch&&ch<='9')
{
x = x*10+ch-'0';
ch = getchar();
}
return x*f;
}
int find(int x)
{
if(fa[x]==x) return fa[x];
return find(fa[x]);
}
void merge(int x,int y)
{
x=find(x);
y=find(y);
if(x==y) return;
fa[y]=x;
return;
}
int x,y;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++) fa[i] = i;
for(int i =1;i<=m;i++)
{
opt = getchar();
x = read();
y = read();
if(opt=='F')
{
merge(x,y);
}
else{
if(!fa2[x])
{
fa2[x] =find(y);
}
else{
merge(y,fa2[x]);
}
if(!fa2[y])
{
fa2[y] =find(x);
}
else{
merge(x,fa2[y]);
}
}
}
for(int i=1;i<=n;i++)
cnt[find(i)]++;
for(int i=1;i<=n;i++)
if(cnt[i]) ans++;
cout<<ans;
return 0;
}