代码CE球跳
查看原帖
代码CE球跳
1079286
123456wjc楼主2025/1/20 16:23
#include<bits/stdc++.h>
using namespace std													;
struct node															{
	int x,y,z,id													;};
node b[100010]														;
struct h															{
	int s															;
	int e															;
	int u															;};
h c[300010]															;//cuntu
int top=0															;
int d[100010]														;//bingchaji			
bool cmp(h a,h b)													{
	return a.u<b.u													;}
int find(int x)														{
	if(d[x]==x) return x											;
	d[x]=find(d[x])													;
	return d[x]														;}
void merge(int x,int y)												{
	int fx=find(x),fy=find(y)										;
	if(fx!=fy) d[fx]=fy												;}
int main()															{
	int n															;
	cin>>n															;
	for(int i=1;i<=n;i++)											{
		cin>>b[i].x>>b[i].y>>b[i].z									;
		b[i].id=i													;}
	sort(b+1,b+1+n,[](node a,node b)								{
		return a.x<b.x												;});
	for(int i=1;i<=n-1;i++)											{
		c[++top].u=b[i+1].x-b[i].x									;
		c[top].s=b[i].id											;
		c[top].e=b[i+1].id											;}
	sort(b+1,b+1+n,[](node a,node b)								{
		return a.y<b.y												;});
	for(int i=1;i<=n-1;i++)											{
		c[++top].u=b[i+1].y-b[i].y									;
		c[top].s=b[i].id											;
		c[top].e=b[i+1].id											;}
	sort(b+1,b+1+n,[](node a,node b)								{
		return a.z<b.z												;});			
	for(int i=1;i<=n-1;i++)											{
		c[++top].u=b[i+1].z-b[i].z									;
		c[top].s=b[i].id											;
		c[top].e=b[i+1].id											;}
	sort(c+1,c+1+top,cmp)											;
	int ans=0,anss=0												;
	for(int i=1;i<=n;i++) d[i]=i									;
	for(int i=1;i<=top;i++)											{
		if(find(c[i].s)!=find(c[i].e))								{
			merge(c[i].s,c[i].e)									;
			ans++													;
			anss+=c[i].u											;
			if(ans>n-1) break										;}}
	cout<<anss														;
	return 0														;}
2025/1/20 16:23
加载中...