タイトル
分析
- まず、木のそれは確かに接続されているグラフ
- それは、最小スパニングツリーではありません
- その後、我々は、割り当てられたいくつかの既存のエッジを置く0
- ANSが不足しています
コード
1の#include <cmath> 2の#include <cstdioを> 3の#include <CStringの> 4の#include <iostreamの> 5の#include <アルゴリズム> 6 の#define LL長い長い 7 使って 名前空間STDを、 8 構造体SB 9 { 10 のint X、Y。 11 } [ 2001 ]。 12 構造体A 13 { 14 INT からの、。ダブルのval; 15 } E [ 1000001 ]。 16 INT地図[ 1001 ] [ 1001 ]。 17 二重 CALC(int型 X1、INT X2) 18 { 19 ダブル ANS = SQRT((ダブル)([X1] .xa [X2] .X)*([X1] .xa [X2] .X)+(ダブル()[X1] .ya [×2] .Y)*([X1] .ya [×2] .Y)); 20の リターンANS; 21 } 22 INT FA [ 1001 ]。 23 ブール CMP(A、B){ リターン a.val < b.val;} 24 int型の検索(INT X){ リターン?X == FA [x]はx:FA [X] = 見つける(FA [X]);} 25 のint main()の 26 { 27 INT N、M。 28 のscanf(" %D%D "、&N、&M)。 29 のために(INT I = 1、XX、YY; I <= N; I ++ ) 30 { 31 のscanf(" %D%D "、およびXX、&YY)。 32 A [i]は.X = XX。[I] .Y = YY。 33 } 34 INT TOT = 0 。 35 のための(int型iは= 1、X、Yと、I <= M; I ++ ) 36 { 37 のscanf(" %D%D "、およびX&Y)。 38の E [++ TOT]。= X。E [TOT] .TO = Y。E [TOT] .val = 0 。 39 地図[X] [Y] = 1 。 40 } 41 のために(INTは iは= 1 ; I <N; I ++ ) 42 のための(INT J = iは+ 1、J <= N; J ++ ) 43 { 44 であれば(私== J ||地図[I] [J] == 1) 続け; 45の E [++ TOT]。= I; E [TOT] .TO = J。E [TOT] .val = CALC(i、j)は、 46 } 47 ソート(E + 1、E + 1回の + TOT、CMP)。 48 のために(INT iは= 1 ; iが<= N; I ++)FA [I] = I。 49のダブル ANS = 0 ; 50 INT CNT = 0 。 51 のために(INT iが= 1 ; I <= TOT && CNT <N- 1 ; I ++ ) 52 { 53 INTは U =(E [i]を見つける。から)、V = 見つける(E [I] .TO)。 54 もし(U == v)を続けます。 55の ANS + = E [I] .val、CNT ++、FA [U] = V。 56 } 57 のprintf(" %の.2f " 、ANS)。 58 リターン 0 ; 59 }