From 04bfa3ab91d4ca0c733d11d69c718ef390665729 Mon Sep 17 00:00:00 2001 From: hanyixuanten <105723997+hanyixuanten@users.noreply.github.com> Date: Wed, 12 Aug 2026 23:05:17 +0800 Subject: [PATCH] new file: P8074.cpp --- P8074.cpp | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 P8074.cpp diff --git a/P8074.cpp b/P8074.cpp new file mode 100644 index 0000000..63852ea --- /dev/null +++ b/P8074.cpp @@ -0,0 +1,83 @@ +#include +#define int long long +using namespace std; +int n; +struct node +{ + int x, y, z, id; +} star[100005]; +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; +} +struct edge +{ + int u, v, w; + const bool operator<(const edge b) const + { + return w < b.w; + } +} gra[500005]; +int tot; +int fa[100005]; +int find(int now) +{ + if (fa[now] == now) + return now; + return fa[now] = find(fa[now]); +} +signed main() +{ + scanf("%lld", &n); + for (int i = 1; i <= n; ++i) + { + scanf("%lld%lld%lld", &star[i].x, &star[i].y, &star[i].z); + fa[i] = i; + star[i].id = i; + } + sort(star + 1, star + n + 1, cmpx); + for (int i = 1; i < n; ++i) + { + gra[tot].u = star[i].id; + gra[tot].v = star[i + 1].id; + gra[tot++].w = abs(star[i].x - star[i + 1].x); + } + sort(star + 1, star + n + 1, cmpy); + for (int i = 1; i < n; ++i) + { + gra[tot].u = star[i].id; + gra[tot].v = star[i + 1].id; + gra[tot++].w = abs(star[i].y - star[i + 1].y); + } + sort(star + 1, star + n + 1, cmpz); + for (int i = 1; i < n; ++i) + { + gra[tot].u = star[i].id; + gra[tot].v = star[i + 1].id; + gra[tot++].w = abs(star[i].z - star[i + 1].z); + } + sort(gra, gra + tot); + int cnt = 0, num = 0; + for (int i = 0; i < tot && cnt < n - 1; ++i) + { + int fu = find(gra[i].u); + int fv = find(gra[i].v); + + if (fu != fv) + { + fa[fu] = fv; // 必须合并根节点 + ++cnt; + num += gra[i].w; + } + } + printf("%lld\n", num); + return 0; +} \ No newline at end of file