制限時間(ノーマル/ Javaの):1000ミリ秒/ 3000MSメモリ制限:65536KByte
総投稿:79:テスト245によって、
説明
ファーマージョンはちょうどいくつかの新しいファームを取得していました!彼は道路の配列を介して、他のファームに任意のファームから移動することができるように道路に農場を接続したいです。道路はすでに農場の一部を接続します。
各 N (1≤ N 千≤)ファーム(便利..番号1 Nは)位置(で表されるX I、 YをI(0≤平面上) X iは 、0≤1,000,000≤ Y iは 1,000,000以下) 。既存の与えられた Mの 道路(1≤ M 接続農場の対として千≤)、ファーマージョンは彼がすべての彼の農場を接続するために構築する必要があり、追加の道路の最小の長さを決定するのに役立ちます。
エントリー
* 1行目:二スペース区切りの整数: N 及び M
*行2 .. N +1:二つのスペースで区切られた整数: X I 及び Yは、iが
行* N +2 .. N + M +2:二つのスペースで区切ら整数: I 及び J、すでに農場結ぶ道があることを示す I およびファーム jは。
輸出
* 1行目:すべての農場を接続するために必要な追加の道路の最小の長さは、小数点第3位を四捨五入せずに印刷。64ビットの浮動小数点数として距離を算出するようにしてください。
サンプル入力
4 1
1 1
3 1
2 3
4 3
1 4
サンプル出力
4.00
元のタイトル
クラスカル法アウトtzojカードのみプリム支払うことができます
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 4 int型N、M。 5 CONST INT MAX = 1005 。 6 CONST ダブル INF = 0x3f3f3f3f 。 7 構造体のポイント{ 8 ダブルX、Y。 9 } P [MAX]。 10 ダブルG [MAX] [MAX]。 11 BOOL VIS [MAX]。 12 ダブル心[MAX]; 13 14インライン二重DST(A点、B点){ 15 戻り SQRT((AX-BX)*(AX-BX)+(AY-によって)*(ay- )によります)。 16 } 17 18 ダブルプリム(){ 19 二重のRES = 0 、ミネソタ州。 20 int型K; 21 VIS [ 1 ] = 真。 22 のためには、(int型 i = 1 ; iがn = <; iは++ ){ 23 心[I] = G [ 1 ] [i]は、 24 } 25 のための(int型 I = 1 ; I <= N- 1、I ++ ){ 26 ミネソタ州= INF。 27 のために(INT J = 1 ; J <= nであり、j ++ ){ 28 であれば(!VIS [J] &&心[J] < ミネソタ州){ 29 ミネソタ州= 心[J]。 30 K = J。 31 } 32 } 33 VIS [k]は= 真。 34の RES + = ミネソタ。 35 のための(int型 J = 1 ; J <= nであり、j ++ ){ 36 であれば(!VIS [J]){ 37 心[J] =分(心[J]、G [K] [J])。 38 } 39 } 40 } 41の リターンRES。 42 } 43 44 INT メイン(){ 45 のint U、V。 46 のscanf(" %D%dの"、&N、&M)。 47 のために(int型 i = 1 ; iが<= N; iが++ ){ 48 のscanf(" %のLFの%のLF "、&P [i]は.X、&P [i]の.Y)。 49 } 50 のために(INT I = 1;私は++; iが<= N ){ 51 のために(int型 J = I + 1、J ++; J <= N; ){ 52 [I] [j]は= [I] = G G [j]がDST(P [I]を、 P [J])。 53 } 54 } 55 のための(int型 i = 0 ; iがm <; iは++ ){ 56 のscanf(" %d個の%のD "、&U、およびV)。 57 G [U] [V] = G [V] [U] = 0 ; 58 } 59 のprintf(" %.2fする\ n " 、プリム())。 60 }