过了,但不理解
查看原帖
过了,但不理解
616964
Adolfo_North楼主2024/1/6 20:43
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+7;
int n,m;
struct node{
	int x,y,z,w;
}cost[N];
struct node2{
	int u,v,w;
}G[N*6];
int fa[N],ans;
bool cmpx(node a,node b){
	return a.x<b.x;
}
bool cmpy(node a,node b){
	return a.y<b.y;
}
bool cmpz(node a,node b){
	return a.z<b.z;
}
bool cmpw(node2 a,node2 b){
	return a.w<b.w;
}
int getfa(int u){
	if(u==fa[u]) return u;
	return fa[u]=getfa(fa[u]); 
} 
void add(int u,int v,int w){
	G[++m].u=u;
	G[m].v=v;
	G[m].w=w;
}
void KU(){
	int cnt=0;
	for(int i=1;i<=m;i++){
		int u=G[i].u,v=G[i].v,w=G[i].w;
		u=getfa(u),v=getfa(v);
		if(u!=v){
			ans+=w;
			cnt++;
			fa[u]=v;
			if(cnt==n-1) return;
		}
	}
}
signed main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++) cin>>cost[i].x>>cost[i].y>>cost[i].z,cost[i].w=i;
	sort(cost+1,cost+1+n,cmpx);
	for(int i=1;i<n;i++){
		add(cost[i].w,cost[i+1].w,cost[i+1].x-cost[i].x);
		add(cost[i+1].w,cost[i].w,cost[i+1].x-cost[i].x);
	}
	sort(cost+1,cost+1+n,cmpy);
	for(int i=1;i<n;i++){
		add(cost[i].w,cost[i+1].w,cost[i+1].y-cost[i].y);
		add(cost[i+1].w,cost[i].w,cost[i+1].y-cost[i].y);
	}
	sort(cost+1,cost+1+n,cmpz);
	for(int i=1;i<n;i++){
		add(cost[i].w,cost[i+1].w,cost[i+1].z-cost[i].z);
		add(cost[i+1].w,cost[i].w,cost[i+1].z-cost[i].z);
	}
	for(int i=1;i<=n;i++) fa[i]=i;
	sort(G+1,G+1+m,cmpw);
	KU();
	cout<<ans;
	return 0;
}

在

sort(cost+1,cost+1+n,cmpx);
	for(int i=1;i<n;i++){
		add(cost[i].w,cost[i+1].w,cost[i+1].x-cost[i].x);
		add(cost[i+1].w,cost[i].w,cost[i+1].x-cost[i].x);
	}
	sort(cost+1,cost+1+n,cmpy);
	for(int i=1;i<n;i++){
		add(cost[i].w,cost[i+1].w,cost[i+1].y-cost[i].y);
		add(cost[i+1].w,cost[i].w,cost[i+1].y-cost[i].y);
	}
	sort(cost+1,cost+1+n,cmpz);
	for(int i=1;i<n;i++){
		add(cost[i].w,cost[i+1].w,cost[i+1].z-cost[i].z);
		add(cost[i+1].w,cost[i].w,cost[i+1].z-cost[i].z);
	}

为什么计算权值是

cost[i+1].x-cost[i].x;
cost[i+1].y-cost[i].y;
cost[i+1].z-cost[i].z;

不应该是 min⁡{∣xA−xB∣,∣yA−yB∣,∣zA−zB∣}\min\{|x_A-x_B|,|y_A-y_B|,|z_A-z_B|\} 吗?

2024/1/6 20:43
加载中...