本人水平有限,仅供学习,如有发现错误,感谢指出
题目链接:传送门(点我)
分析:就是并查集模板。不了解并查集的朋友可以先去看这个视频学习。
视频链接: 传送门(点我)
本人代码为了方便和刷算法的速度,码风诡异,喜欢压行,写工程禁用,文学爱好者谨慎观看。这里没有像视频里面一样利用rank[] 数组优化,因为没有必要。
AC代码:
#include<bits/stdc++.h>
#define MAXN 1005
using namespace std;
int p[MAXN*MAXN],cnt[MAXN*MAXN],n,m,a,b,k,ans;
int f(int x){
return p[x]==-1?x:p[x]=f(p[x]);}//find root and compressed path
int main()
{
memset(p,-1,sizeof(p));
cin>>m>>n>>k;
while(k--){
cin>>a>>b;
if(f(a)!=f(b))p[f(a)]=b;//merge
}
for(int i=1;i<=n*m;i++)cnt[f(i)]=1;
for(int i=1;i<=n*m;i++)if(cnt[i])ans++;
return cout<<ans<<endl,0;
}