并查集模板
2026-08-27 14:30:41
发布于:广东
2阅读
0回复
0点赞
这道题可用特判(就两个点)
正解
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=2e5+100;
ll t,n,m,fa[N],to[N],f1,f2;
int find(int x){//并查集函数
if(fa[x]==x)return x;
return fa[x]=find(fa[x]);
}
int main(){
cin>>t;
while(t--){
cin>>n>>m;
for(int i=1;i<=n;i++){//初始化
fa[i]=i;to[i]=0;
}
while(m--){
ll u,v;
cin>>u>>v;
f1=find(u),f2=find(v);
fa[f1]=fa[f2];//合并
}ll cnt=0;
for(int i=1;i<=n;i++){//统计有多少个不同的祖先
f1=find(i);
if(!to[f1]){
cnt++;
to[f1]=1;
}
}cout<<cnt<<"\n";
}
return 0;
}
这里空空如也







有帮助,赞一个