B:最小コスト

B:最小コスト

 

 

ソリューション:まず、最小スパニングツリーでANSユニコムすべての点を最小コストを求めます

1ときに最大量のポイントMXのシークで

ANS-mxが答えです

 

#include <iostreamの> 
する#include <アルゴリズム> 
の#include <ベクトル> 
の#include <math.h>の
 に#define LLロングロング
 使用 名前空間STD;
 INT P [ 100005 ]は、R [ 100005 ];
 int型N-、M; 
LL ANS = 0 ; 
ベクター < INT >デュ[ 100005 ]; // の計算
構造体ノード
{ 
  int型 X; // X、Y座標は、vは重量である
  INT ; Y
   INT V; 
} A [ 100005 ];
 BOOLCMP(ノードB、ノードC)
{ 
  リターン BV < CVが; 
} 
int型(検索INT X)// 所有者誰要素Xを見つける
{
     IF(x == P [X])
         のリターン; X
     そう
        戻り P [X]を= (P [X])を探す; 
} 

無効に参加(int型 X、INT Y)// 二組パスコンプレッサマージ
{
     INT xRoot = ;(X)検索
     INT yRoot = (Y)を探す; 

    IF(xRoot == yRoot )// 同じボス、マージされません
        リターン;
     //1-CNT = CNT; 
    IF(R&LT [xRoot <R&LT [yRoot])// R&LT [i]はiは要素ツリーの高さであり、ツリーのルートボス高のルートノード認識低木 
        Pは[xRoot] = yRoot;
      IF(R&LT [xRoot]> R&LT [yRoot])
        P [yRoot] = xRoot;
     
    { 
        P [yRoot] = xRoot; // 同じ高木、追加する樹高ボス 
        Rを[xRoot] + + ; 
    } 
} 
ボイドクラスカル()
{ 
  INT I = 1 ; I <= N; I ++)// ノードルート初期化 
    P [I] = Iを、
  ソート(A + 1、A + M + 1。、CMP)。
  INTは iは= 1、I ++; I <= M 
  { 
    場合(!([I] .X)を見つける= ([I] .Y)見つける。)
    { 
      [、.X [I](参加I] .Y)。
      ANS = ANS + A [i]の.V。
      デュ[I] .X] .push_back([I] .V)。
      デュ[I] .Y] .push_back([I] .V)。
    } 
  } 
} 
int型のmain()
{ 
    CIN >> N >> M。
    以下のためにINT iが= 1 ; I <= M; I ++ 
        CIN >> [I] .X >> [I] .Y >> [I] .V。
    クラスカル(); 
    int型   のmx =0 ;
     のためにINT I = 1 ; I <= N; I ++ IF(DU [I] .size()== 1// 重量とポイントの最大値度見つける 
            MX = MAX(MXは、[デュI] [ 0 ]); 
    COUT << ANS-MX << ENDL;
     戻り 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/-citywall123/p/11928407.html