#include<bits/stdc++.h>
using namespace std;
int w[155][155];
struct node {
int u,v,w;
} e[4000005];
int n,m,vis[155][155],cnt;
const int dx[]= {0,1,-1,1,-1,2,-2,2,-2};
const int dy[]= {0,2,2,-2,-2,1,1,-1,-1};
queue<int>q1,q2,q3;
void bfs(int s,int t) {
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++)vis[i][j]=0;
}
q1.push(s);
q2.push(t);
q3.push(0);
while(!q1.empty()) {
int x=q1.front(),y=q2.front(),t=q3.front();
q1.pop(),q2.pop();
q3.pop();
if(vis[x][y])continue;
vis[x][y]=1;
w[x][y]=t;
for(int i=1; i<=8; i++) {
int nx=x+dx[i],ny=y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=n&&!vis[nx][ny]) {
q1.push(nx);
q2.push(ny);
q3.push(t+1);
}
}
}
}
int x[2005],y[2005],fa[155];
int cmp(node _,node __) {
return _.w<__.w;
}
int findd(int now) {
if(fa[now]==now)return now;
return fa[now]=findd(fa[now]);
}
void vnion(int u,int v) {
u=findd(u);
v=findd(v);
fa[u]=v;
}
int main() {
cin>>m>>n;
for(int i=1; i<=n; i++) {
fa[i]=i;
}
for(int i=1; i<=m; i++) {
cin>>x[i]>>y[i];
}
for(int i=1; i<=m; i++) {
for(int k=1; k<=n; k++) {
for(int l=1; l<=n; l++) {
w[k][l]=2147483647;
}
}
bfs(x[i],y[i]);
for(int j=1; j<=m; j++) {
e[++cnt].u=i;
e[cnt].v=j;
e[cnt].w=w[x[j]][y[j]]+1;
}
}
sort(e+1,e+cnt+1,cmp);
int tot=0;
long long ans=0;
for(int i=1; i<=cnt; i++) {
int uu=findd(e[i].u),vv=findd(e[i].v);
if(uu!=vv) {
vnion(uu,vv);
ans+=e[i].w;
if(tot==n-1)break;
}
}
cout<<ans;
return 0;
}
Subtask 1、3 AC,其他全 WA。