#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct node
{
int x,y,v;
};
node a[2000009];
int f[2000009];
bool cmp(node a,node b)
{
return a.v<b.v;
}
int findx(int i)
{
if(f[i]!=i)f[i]=findx(f[i]);
return f[i];
}
void unionn(int r1,int r2)
{
int t1=findx(r1);
int t2=findx(r2);
f[t1]=t2;
}
int main()
{
int tot=0,k=0;
int m,n;
int s=0;
scanf("%d%d",&m,&n);
for(int i=1;i<=m*n;i++)
f[i]=i;
int x1,x2,y1,y2;
for(int i=1;i<=m*n;i++)
{
if(i%n!=0)
{
s++;
a[s].x=i;
a[s].y=i+1;
a[s].v=2;
}
if(i<=(m-1)*n)
{
s++;
a[s].x=i;
a[s].y=i+n;
a[s].v=1;
}
}
while(scanf("%d%d%d%d",&x1,&y1,&x2,&y2)!=EOF)
unionn((x1-1)*n+y1,(x2-1)*n+y2);
sort(a+1,a+s+1,cmp);
for(int i=1;i<=s;i++)
{
if(findx(a[i].x)!=findx(a[i].y))
{
unionn(a[i].x,a[i].y);
k++;
tot+=a[i].v;
}
}
printf("%d",tot);
return 0;
}
1394:连接格点(grid)
最新推荐文章于 2025-03-07 11:06:15 发布