RE求助!
查看原帖
RE求助!
1312482
Delightedppp楼主2025/1/18 16:39
#include<bits/stdc++.h>
using namespace std;
struct node{
	int x;
	int y;
	int z;
	int id;
}a[1000001];
struct ppp{
	int u;
	int v;
	int w;
}pp[1000001];
bool cmp1(node a,node b){
	return a.x<=b.x;
}
bool cmp2(node a,node b){
	return a.y<=b.y;
}
bool cmp3(node a,node b){
	return a.z<=b.z;
}
bool cmp(ppp a,ppp b){
	return a.w<=b.w;
}
int n,ans,f[1000001];
int find(int x){
	if(x==f[x])
		return x;
	return f[x]=find(f[x]);
}
int main() {
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].x>>a[i].y>>a[i].z;
		a[i].id=i;
		f[i]=i;
	}
	sort(a+1,a+n+1,cmp1);
	for(int i=2;i<=n;i++){
		pp[i].u=a[i-1].id;
		pp[i].v=a[i].id;
		pp[i].w=abs(a[i].x-a[i-1].x);
	}
	pp[1].w=1e9;
	sort(a+1,a+n+1,cmp2);
	for(int i=2+n;i<=n+n;i++){
		pp[i].u=a[i-n-1].id;
		pp[i].v=a[i-n].id;
		pp[i].w=abs(a[i-n].y-a[i-n-1].y);
	}
	pp[n+1].w=1e9;
	sort(a+1,a+n+1,cmp3);
	for(int i=2+2*n;i<=3*n;i++){
		pp[i].u=a[i-2*n-1].id;
		pp[i].v=a[i-2*n].id;
		pp[i].w=abs(a[i-2*n].z-a[i-1-2*n].z);
	}
	pp[2*n+1].w=1e9;
	sort(1+pp,pp+3*n+1,cmp);
	for(int i=1;i<=3*n-3;i++){
		if(f[find(pp[i].u)]!=f[find(pp[i].v)]){
			ans+=pp[i].w;
			int x=find(pp[i].u),y=find(pp[i].v);
			f[x]=y;
		}
	}
	cout<<ans;
	return 0; 
}
2025/1/18 16:39
加载中...