tzoj4679ビル道路(+プリム最小スパニングツリーアルゴリズム)

制限時間(ノーマル/ 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 及び  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

元のタイトル

USACO 2007年12月シルバー

 
 
クラスカル法アウト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 }

 

 

おすすめ

転載: www.cnblogs.com/ChangeG1824/p/11740765.html