羅区P1991無線通信ネットワーク最小スパニングツリー[]

トピックhttps://www.luogu.org/problemnew/show/P1991

問題の意味:S点の間の無制限の通信が存在してもよいように、点P、S点の座標。

(間接的であってもよい)は、通信経路を有するように、通信路の最長セクションでは、すべての点間二十から二長さです。

アイデア:最近の問題はよく見ていません。前の質問を見ていない-1、この問題はああやって、小数点以下2桁正確で表示されませんでした。

最初のマップに内蔵され、その後、第一PS大きな経路長の最小スパニングツリーを見つけます。

1の#include <cstdioを>
 2の#include <cstdlib>
 3の#include <地図>
 4の#include < 設定 >
 5の#include <CStringの>
 6の#include <アルゴリズム>
 7の#include <ベクトル>
 8の#include <cmath> 
 9# <積層体>含む
 10の#include <キュー>
 11の#include <iostreamの>
 12  
13  の#define INF 0x3f3f3f3f
 14  使って 名前空間STDを、
15 typedefの長い 長いLL。
16のtypedefペア< int型int型 > PR。
17  
18  INT S、N。
19  CONST  INT MAXN = 505 20  構造体ノード{
 21      のint X、Y。
22  } [MAXN]ノード。
23  ダブルG [MAXN] [MAXN]。
24  
25  二重 DIST(int型 I、INT J)
 26  {
 27      リターン(ノード[J] .X)+ - SQRT((ノード[I] .X -ノード[J] .X)*(ノード[I] .Xノード[i]は.Y -ノード[J] .Y)*(ノード[I] .Y - ノード[J] .Y))。
28  }
 29  
30  BOOLVIS [MAXN]。
31  ダブルD [MAXN]。
32ベクター< ダブル > ANS。
33  ボイドプリム(INT X)
 34  {
 35      のmemset(D、0x3fをはsizeof (d)参照)。
36      D [X] = 0 37      VIS [X] = 38      のためには、int型 i = 1 ; iがn = <; iは++ ){
 39          D [I] = G [X] [I];
40      }
 41      
42      のためにINTT = 1T <N。T ++ ){
 43          分= INF。
44          int型minid。
45          のためには、int型 i = 1 ; iがn = <; iは++ ){
 46              であれば(VIS [I] && D [i]は、<!分){
 47                  分= D [i]は、
48                  minid = I;
49              }
 50          }
 51          VIS [minid] = 52          ans.push_back(分)。
53          のためのint型 I =1 ; I <= N。私は++ ){
 54              であれば(Dの[I]> G [minid] [I]){
 55                  D [I] = G [minid] [I]。
56              }
 57          }
 58      }
 59  }
 60  
61  のint main()の
 62  {
 63      のscanf(" %d個の%のD "、&​​S&N)
64      のためにint型 i = 1 ; iが<= N; iが++ ){
 65          のscanf(" %d個の%のD "、およびノード[i]は.X、およびノード[I] .Y)。
66      }
 67      のためのint型 i = 1 ; iが<= N; iが++ ){
 68          のためのint型 J = I + 1、J <= nであり、j ++ ){
 69              G [I] [J] = G [j]を[ I] = DIST(i、j)は、
70              // のprintf( "%LFを\ n"、G [I] [J])。
71          }
 72      }
 73      
74      プリム(1 )。
75      ソート(ans.begin()、ans.end())。
76      のprintf(" %.2lfする\ n "、ANS [N - S - 1 ])。
77      リターン 0 ;
78 }

 

おすすめ

転載: www.cnblogs.com/wyboooo/p/11116983.html