サテライト
[タイトル]背景
伝説の長い、長い時間前に、空のn星。
[問題の説明]
ユニバースは、三次元空間であるので、各星の座標は、4つのパラメータ(霧)を有しています。星は、i番目の
座標(X [i]は、Y [なる I]、Z [i]は、[I] W)。神の偉大なラーメンは詐欺の一種マスター:次元削減ダース
、ヒットをそのようにiとjの星の星の間の距離
分(| X [i]は-x [J] |、| Y [i]は、 -y [J] |、| Z [i]は-z [J] |、|)| [I] -w [j]はワット
2つの星のための神のラーメンは星の一部の間で双方向の道路を構築したい、価格それとの間の距離は、
任意の2つの星の間で相互に到達することができます。ラーメンの神様として、4年生の数学の天然水までの
レベル、彼は最小のコストはどのくらいです、ローストにあなたを焼くたかったです。
[入力形式の
ライン1の整数nは、n個の星を意味します。
次のnラインは、各ライン4整数x [i]は、Y [I [i]は、W]、Z [i]は、 iを表す星の座標を
マークします。
[出力形式]
最小コストを表す整数。
[サンプル入力]
。4
。1 2 4 3
5 6 7 8
9 11 10 12
13 14 15 16
[出力]サンプル
12
[データ]の範囲の
数N-
1 10
2 123
456 3
。4 789
5 1888
。6 2000
7 50000
8 100000
9 150000
10 150000
すべての答えは、データと長い長距離非負整数にすぎません
解決法:シークエンス4、一次元の4次元削減。保証すべてのソートは、隣接する点を接続します
それは残業に構築するために、n個の* nはエッジ、またはサイドを構築するために許可されていない依頼することです。。。。
#include <ビット/ STDC ++ H> 使用して名前空間STDを、 #define MMST(B)のmemset(A、B、はsizeof(A)) の#define MMCP(B)のmemcpy(A、B、はsizeof(B)) のtypedef 長い長LL。const int型 N = 150010 ; int型N、FA [N]。 int型のCNT; ANS LL; 構造体YY { INT NUM、W、X、Y、Z、。 } F [N]。構造体の縁 { int型Uを、V。 LLのワット。 } [N << 2 ]。 DIS(YY、YY b)はLL { O LL =分(ABS(AX-BX)、ABS(ay- よります))。 LLのP =分(ABS(AZ-BZ)、ABS(aw- BW))。 戻り分(O、P)を、 } INT(見つけるINT X) { 場合(!FA [X] = X) FA [X] = (FA [X])を見つけます。 戻りFAを[X]。 } ブールCMP1(YY、YY b)は { 戻り AX < BX。 } ブールCMP2(YY、YY b)は { 戻り AY < によって、 } ブールCMP3(YY、YY b)は { 返す <AZをBZ。 } ブールCMP4(YY、YY b)は { 戻り AW < BW。 } ブールCC(辺A、辺B) { 戻り AW < BW。 } int型のmain() { freopenは(" planet10.in "、" R " 、STDIN)。 freopenは(" planet10.ans "、" W " 、STDOUT)。 cinを >> N; 用(int型 i = 1 ; iが<= N iが++ ) { scanf関数("%D%D%D%D "、&F [i]が.X、&F [i]が.Y、&F [i]が.W、&F [i]が.Z); F [i]は.num = I; } ソート(F + 1、F + N + 1 、CMP1) のための(int型 I = 2 ; iが<= N iが++ ) { [ [1- F ++ CNT] .U = 1 ] .num; [CNT ] .V = F [i]が.num; [CNT] .W = DIS([I-F 1 ]、[I] F); } ソート(F + 1、F + N + 1 、CMP2) のために(int型 I = 2; iが<= N; iは++ ) { [ ++ CNT] .U = F [I- 1 ] .num。 [CNT] .V = F [i]が.num。 [CNT] .W = DIS(F [I- 1 ]、F [I])。 } ソート(F + 1、F + N + 1 、CMP3)。 以下のために(int型 iは= 2 ; iがn = <; iは++ ) { [ ++ CNT] .U = F [I- 1 ] .num。 [CNT] .V = F [i]が.num。 [CNT] .W = DIS(F [I- 1 ]、F [I])。 } ソート(F + 1、F + N + 1 、CMP4)。 以下のために(int型 iは= 2 ; iがn = <; iは++ ) { [ ++ CNT] .U = F [I- 1 ] .num。 [CNT] .V = F [i]が.num。 [CNT] .W = DIS(F [I- 1 ]、F [I])。 } のための(int型 i = 1 ; iが<= N; iが++ ) FA [I] = I。 ソート( + 1、A + CNT + 1 、CC)。 以下のための(int型私は= 1 ;;私は= CNTを<I ++は) 場合(!=([I] .U)を見つける検索([I] .V)) { ANS + = A [i]の.W。 FAは[FAは、[i]は.U] = [I] .V。 } COUT << ANS << ENDL。 リターン 0 ; }