#include<bits/stdc++.h>
using namespace std;
int fri[1001],ene[1001];
int Count[1001];
int find_fri(int k) {
if(k!=fri[k]) {
fri[k]=find_fri(fri[k]);
}
return fri[k];
}
int find_ene(int k) {
if(k!=ene[k]) {
ene[k]=find_ene(ene[k]);
}
return ene[k];
}
int Onion_fri(int a,int b) {
fri[find_fri(a)]=find_fri(b);
}
int Onion_ene(int a,int b) {
ene[find_ene(a)]=find_ene(b);
}
int main() {
int n,m,p,q,ans=0;
char opt;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) {
fri[i]=i;
ene[i]=i;
}
for(int i=1;i<=m;i++) {
cin>>opt>>p>>q;
if(opt=='E') {
Onion_ene(p,q);
for(int j=1;j<=n;j++) {
if(find_ene(j)==find_ene(p)&&j!=p&&j!=q) {
Onion_fri(j,q);
}
if(find_ene(j)==find_ene(q)&&j!=q&&j!=p) {
Onion_fri(j,p);
}
}
}
if(opt=='F') {
Onion_fri(p,q);
for(int j=1;j<=n;j++) {
if(find_fri(j)==find_fri(p)&&j!=p&&j!=q) {
Onion_fri(j,q);
}
if(find_fri(j)==find_fri(q)&&j!=q&&j!=p) {
Onion_fri(j,p);
}
}
}
}
for(int i=1;i<=n;i++) {
Count[find_fri(i)]++;
}
for(int i=1;i<=n;i++) {
if(!Count[i]) {
ans++;
}
}
printf("%d",ans);
return 0;
}
输入: 6 4 E 1 4 F 3 5 F 4 6 E 1 2 输出: 4 经过验证,结点2在程序执行时指向了1