
注意:根是沿着南北或东西方向发展!!!
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e6+10;
int fu[maxn];
int vis[maxn];
int xunzu(int x)
{
if(x==fu[x])
{
return x;
}
return fu[x]=xunzu((fu[x]));
}
int main()
{
int m,n;
memset(vis,0,sizeof(vis));
scanf("%d%d",&m,&n);
for(int i=1; i<=m*n; i++)
{
fu[i]=i;
}
int k;
scanf("%d",&k);
for(int i=1; i<=k; i++)
{
int a,b;
scanf("%d%d",&a,&b);
int p1=xunzu(a);
int p2=xunzu(b);
if(p1!=p2)
{
fu[p1]=p2; ///把两个祖先节点连接起来
}
}
int ans=0;
for(int i=1; i<=m*n; i++)
{
int f=xunzu(i);
if(vis[f]==0)
{
ans++;
vis[f]=1;
}
}
cout<<ans<<endl;
}
707

被折叠的 条评论
为什么被折叠?



