P1195ポケットの空

リンク:P1195

------------------------------

この質問は確かに一見最小スパニングツリー、最小スパニングツリーで考えるが、最終的には通信ブロックになったことができます。

ねえ、最終的には?私たちは、エッジがプラスではなく、リンクブロックの両端側で、Carusカール・アルゴリズムを考えます。

言い換えれば、我々はすべての操作、通信ブロックを排除することと同等のものを持っています。

このように、我々はそれはできないのkユニコムの最後のブロックを左?

-----------------------------

1の#include <iostreamの>
 2の#include <cstdioを>
 3の#include <アルゴリズム>
 4  使って 名前空間STDを、
5  int型のp;
6  構造体B {
 7      int型F;
8      int型へ。
9      int型のV;
10 }扁[ 10500 ]。
11  int型N、M、K。
12  INT FA [ 105000 ]。
13  int型の検索(INT X){
 14      であれば(X == FA [X])
 15      リターンバツ;
16      
17      リターン FA [X] = (FA [X])を見つけます。
18  }
 19  INT上の(int型のx、int型のY){
 20      のint X1 = 見つける(X)
21      INT Y1 = (y)を見つけます。
22      もし(X1 =!Y1)
 23      FA [X1] = Y1;
24  }
 25  ブールCMP(BA、BC){
 26      リターン AV < CV。
27  }
 28  INT X、Y、L。
29の int型のANS;
30  INTメイン(){
 31      CIN >> N >> M >> K。
32      のためにint型 I = 1 ; I <= M; ++ i)が{
 33          のscanf(" %D%D%D "、およびX&Y、&L)。
34          のp ++ ;
35          扁[P] .F = X。
36          扁[P] .TO = Y。
37          扁[P] .V = L。    
38      }
 39      のためのint型 i = 1 ; iは= N <; ++ I)
 40      のFA [I] = I。
41      もしメートル(!=1 42      ソート(扁+ 1、扁+ 1 + M、CMP)。
43          int型 K1 = N- K。
44          のintフラグ= 1 45          一方(K1){
 46              INT U = 扁[フラグ] .F。
47              のint V = 扁[フラグ] .TO。
48              もし((見つけるU)=!見つける(V)){
 49                  k1-- 50の                  ANS + = 扁[フラグ] .V。
51                  オン(U、V)。
52              }
 53              フラグ++;
54          }
 55      COUT << 年。
56      リターン 0 57 }
交流

 

おすすめ

転載: www.cnblogs.com/For-Miku/p/11258137.html