タイトル説明
雨の欠如のために、ファーマージョンはNフィールドiは2次元平面内の異なる点(XI、YI)によって記載されている(1 <= N <= 2000).Eachフィールド間の水tosend灌漑システムを構築したいです
0 <= XIと、YI <= 1000でi及びjは、それらの間の二乗ユークリッド距離に等しいtwofields間の水管を構築するコスト:(XI - XJ)^ 2 +(YI - YJ)^ 2
FJはhisfieldsのすべてが一緒にリンクされているように、配管の最小コストのシステムを構築したいと思います - 任意のフィールド内の水は、他のフィールドに到達するために、パイプのasequence従うことができるように。
残念ながら、FJは彼のirrigationsystemをインストール支援している契約者は、そのコストは(Euclideanlengthを乗)少なくともC(1 <= C <= 1,000,000)でない限り、任意のパイプをインストールすることを拒否します。
FJは、彼がパイプのネットワークとすべての彼のフィールドを接続するために賃金を必要とする最小量を計算する助けてください。
ファーマージョンは彼の与えた、灌漑システムを構築したかったN(1 <= N フィールドとボトル入り飲料水の<= 2000)のブロックを。二次元平面内の農場、農地のi番目のブロック(座標X_I 、 Y_I )(0 <= X_I 、 Y_I <= 1000)、フィールド内のI 及び農地J そのコストは、2本のパイプが農地ユークリッド敷設することです距離のリード角(X_I - X - jが)^ 2 + (Y_I - y_j)^ 2。
ファーマージョンは、私たちがフィールド間のすべての水を渡すことができることを望むだけでなく、少なくともお金を過ごしたいです。しかし、インストーラはC未満の水管のコストをインストールすることを拒否(1 <= C <= 1,000,000)。
ジョンは、あなたの出力を確立できない場合、農家は、灌漑ネットワークの最小コストの確立を支援してください-1。
入出力フォーマット
入力フォーマット:
* 1行目:整数NおよびC.
*行2..1 + N:ラインI + 1は整数xiとyiのが含まれています。
出力フォーマット:
* 1行目:フィールドを接続するパイプのネットワークの最小コスト、または-1そのようなネットワークが構築できない場合。
サンプル入力と出力
説明
INPUTの詳細:
3箇所(0,2)、(5,0)でのフィールド、および(4,3)があります。請負業者は、コストだけ、少なくとも11のパイプをインストールします。
OUTPUTの詳細:
そのコストは唯一の10彼はそのためのコスト29で間の配管(0,2)と(5,0)を構築するだろうので、FJは、(4,3)と(5,0)でのフィールド間のパイプを構築することはできませんそして、コスト17で(0,2)と(4,3)との間のパイプ。
出典:USACO 2014月コンテスト、シルバー
分析:
このタイトルはそれ以外の場合は、REになり、各二点間のコストを計算し、Cとの間の関係を決定した後、エッジを調達するかどうかを決定するが、配列は2000 * 2000ではなく、2000年であることに注意する必要があり、最低限のスパニングツリーです。
コード:
1の#include <iostreamの> 2の#include <cstdioを> 3の#include <アルゴリズム> 4 使って 名前空間STDを、 5 のconst int型 M = 4000005 。 6 int型N、C、TOT、ANS。 7 INT FA [M]。 8 int型XCOR [M]、ycor [M]。 9 構造体ノード{ 10 int型のU、V、W。 11 } [M]。 12 INT findr(INT X){ 13 であれば(FA [X] == x)をリターンX。 14 リターン FA [X] =findr(FA [X])。 15 } 16 空隙マージ(int型のx、int型のY){ 17 のint A = findr(X)。 18 INT B = findr(Y)。 19 場合(FA [A] = FA [B]!)FA [B]は= 。 20 リターン; 21 } 22 ブール CMP(ノードX、ノードY){ 戻り XW < YW;} 23 int型のmain(){ 24 CIN >> N >> C。 25 のためには、(int型 i = 1 ; iがn = <; iは++)FA [I] = I。 26 以下のために(int型 i = 1 ; iが<= N; iは++)CIN >> XCOR [I] >> ycor [I]。 27 のために(int型 i = 1 ; iが<= N iが++ ){ 28 のために(int型 J = I + 1、J <= nであり、j ++ ){ 29 のintコスト=(XCOR [I] -xcor [J])*( XCOR [I] -xcor [J])+(ycor [I] -ycor [J])*(ycor [I] - ycor [J])。 30 であれば(コスト> = C){ 31 [++ TOT] .U = I。 32 [TOT] .V = J。 33 [TOT] .W = コスト。 34 } 35 } 36 } 37 ソート(A + 1、+ TOT + 1 、CMP)。 38 int型 CNT = 0 。 39 のために(int型 I = 1 ; I <= TOT; iは++ ){ 40 であれば(FA [findr([I] .U)] =!FA [findr([I] .V)]){ 41 ANS + = [I] .W。 42 マージ([I] .U、[I] .V)。 43 CNT ++ ; 44 } 45 } 46 であれば(CNT == N- 1)COUT << ANS << ENDL。 47 他の COUT << - 1 << てendl; 48 リターン 0 ; 49 }