#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define ll long long
#define x first
#define y second
typedef pair<int,int> PII;
const int N=1e3+10;
int n,m,k,ans,ecnt;
int fa[N*N];
int findFa(int x){
return x==fa[x]?x:fa[x]=findFa(fa[x]);
}
int Union(int x,int y){
int fx=findFa(x);
int fy=findFa(y);
if(fx!=fy){
fa[fx]=fy;//需要合并
return 1;
}
return 0; //不需要合并
}
int main() {
cin>>n>>m;
for(int i=1;i<=n*m;i++)fa[i]=i;
int x1,y1,x2,y2;
while(cin>>x1>>y1>>x2>>y2){
int u=(x1-1)*m+y1,v=(x2-1)*m+y2;//将坐标转为编号
Union(u,v);
}
//纵向链接
for(int i=1;i<=m;i++){
for(int j=1;j<n;j++){//注意边界
int u=(j-1)*m+i,v=j*m+i;//计算上下两个点的编号
if(Union(u,v))ans++;//如果没有链接那么链接上,费用+1
}
}
//横向链接
for(int i=1;i<=n;i++){
for(int j=1;j<m;j++){
int u=(i-1)*m+j,v=(i-1)*m+j+1; //计算连续两个横向坐标编号
if(Union(u,v))ans+=2;
}
}
cout<<ans;
return 0;
}
12-04
4994
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交