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 ; }