始终 80pts。
#include<bits/stdc++.h>
#define l long long
using namespace std;
l n,m,qq=1,f[1005][1005],fa[10000005],ans;
l find(l x)
{
if(x-fa[x])fa[x]=find(fa[x]);
return fa[x];
}
int main()
{
scanf("%lld%lld",&m,&n);
for(l i=1;i<=n;i++)for(l j=1;j<=m;j++,qq++)f[i][j]=qq;
for(l i=0;i<=qq;i++)fa[i]=i;
l xa,xb,ya,yb;
while(scanf("%lld%lld%lld%lld",&xa,&xb,&ya,&yb)==4)
{
int xx=find(f[xa][xb]),yy=find(f[ya][yb]);
if(xx-yy)fa[yy]=xx;
}
for(l j=1;j<=n;j++)
for(l i=1;i<m;i++)
{
l x=find(f[i][j]),y=find(f[i+1][j]);
if(x-y)fa[y]=x,ans++;
}
for(l i=1;i<=m;i++)
for(l j=1;j<n;j++)
{
l x=find(f[i][j]),y=find(f[i][j+1]);
if(x-y)fa[y]=x,ans+=2;
}
printf("%lld",ans);
return 0;
}