https://www.luogu.com.cn/record/117150990 代码:
#include<bits/stdc++.h>
using namespace std;
int f[1000010],d[1000010];
int n,m,ans;
inline void init(){
for(int i=1;i<=n;i++)f[i]=i;
}
int find(int x){
if(f[x]==x)return x;
else return f[x]=find(f[x]);
}
inline void merge(int a,int b){
int ra=find(a),rb=find(b);
if(ra==rb)return;
f[ra]=rb;
}
int main(){
scanf("%d%d",&n,&m);
init();
for(int i=0;i<m;i++){
getchar();
int a,b;
char p;
scanf("%c%d%d",&p,&a,&b);
if(p=='F'){
merge(a,b);
}
else {
if(d[a])merge(d[a],b);
else d[a]=b;
if(d[b])merge(d[b],a);
else d[b]=a;
}
}
for(int i=1;i<=n;i++){
if(f[i]==i)ans++;
}
cout<<ans<<endl;
return 0;
}
就离谱,本地第一个点可过