- 性质:每个点向坐标系八个方向最近的点连边
- 实现:如y轴右偏45°区域,满足x0<=x1,y0<=y1 且 y1−x1>=y0−x0
因此x1−x0+y1−y0=(x1+y1)−(x0+y0),用线段树维护下标为y1−x1,值x1+y1
每次修改前,查询下标大于y0−x0,值尽量小
最后跑kruskar即可
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
typedef long long ll;
int n,c[N],p[N],ad=2e5,ecnt,inf=0x3f3f3f3f,fa[N];
int g_fa(int u) {
if(fa[u]==u) return u;
return fa[u]=g_fa(fa[u]);
}
struct edge {
int x,y; ll z;
}E[N];
struct node {
int x,y,id;
}a[N];
bool cmp(node u,node v) {
if(u.x==v.x) return u.y<v.y;
return u.x<v.x;
}
bool cmp2(edge u,edge v) {return u.z<v.z;}
int lowbit(int i) {return i&(-i);}
void Update(int del,int sum,int s) {
del+=ad;
for(int i=del;i;i-=lowbit(i)) {
if(c[i]>sum) {
c[i]=sum,p[i]=s;
}
}
}
void query(int del,int sum,int s) {
del+=ad;
int pp,minn=inf;
for(int i=del;i<=ad*2;i+=lowbit(i)) {
if(c[i]<minn) {
minn=c[i];
pp=p[i];
}
}
if(minn!=inf) E[++ecnt]=(edge){s,pp,minn-sum};
}
void Build() {
memset(c,0x3f,sizeof(c));
sort(a+1,a+1+n,cmp);
for(int i=n;i>=1;i--) {
int u=a[i].y-a[i].x,v=a[i].y+a[i].x;
query(u,v,a[i].id);
Update(u,v,a[i].id);
}
}
void init() {
Build();
for(int i=1;i<=n;i++) swap(a[i].x,a[i].y);
Build();
for(int i=1;i<=n;i++) a[i].x*=-1;
Build();
for(int i=1;i<=n;i++) swap(a[i].x,a[i].y);
Build();
for(int i=1;i<=n;i++) fa[i]=i;
}
ll solve() {
sort(E+1,E+1+ecnt,cmp2);
ll ans=0;
for(int i=1,j=1;i<=ecnt&&j<n;i++) {
int u=g_fa(E[i].x),v=g_fa(E[i].y);
if(u!=v) {
fa[u]=v;
ans+=E[i].z;
j++;
}
}
return ans;
}
int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++) {
scanf("%d%d",&a[i].x,&a[i].y); a[i].id=i;
}
init();
ll ans=solve();
printf("%lld\n",ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人