种类并查集模板
2026-09-27 15:03:32
发布于:浙江
7阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+7;
int fath[2*N];
bool vis[2*N];
int ans;
int n,m;
int find(int x){
return fath[x]==x?x:fath[x]=find(fath[x]);
}
void merge(int u,int v){
int fu=find(u);
int fv=find(v);
if(fu==fv) return ;
fath[fv]=fu;
}
int main(){
cin>>n;
cin>>m;
for(int i=1;i<=2*n;i++){
fath[i]=i;
}
for(int i=1;i<=m;i++){
int u,v;
char op;
cin>>op>>u>>v;
if(op=='F'){
merge(u,v);
}
else{
merge(u,v+n);
merge(u+n,v);
}
}
for(int i=1;i<=n;i++){
int root=find(i);
if(vis[root]) continue;
vis[root]=true;
ans++;
}
cout<<ans<<'\n';
return 0;
}
全部评论 1
d
2026-09-27 来自 浙江
0




有帮助,赞一个