[8.5]テスト衛星

                         サテライト
[タイトル]背景
伝説の長い、長い時間前に、空の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]は.nu​​m = I; 
    } 
    
    ソート(F + 1、F + N + 1 、CMP1)
     のためのint型 I = 2 ; iが<= N iが++ 
    { 
        [ [1- F ++ CNT] .U = 1 ] .nu​​m; 
        [CNT ] .V = F [i]が.nu​​m; 
        [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 ] .nu​​m。
        [CNT] .V = F [i]が.nu​​m。
        [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 ] .nu​​m。
        [CNT] .V = F [i]が.nu​​m。
        [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 ] .nu​​m。
        [CNT] .V = F [i]が.nu​​m。
        [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 ; 
}

 

おすすめ

転載: www.cnblogs.com/wuhu-JJJ/p/11307922.html