(クロストレーニング運動負荷試験清華||を介して)ツリー

メモリ制限:512のMIB 期限:3000ミリ秒標準出力
質問の種類:伝統的な評価方法:テキスト比較
 

タイトル説明

あなたは、各エッジは黒または白で、加重図にない通信を与えます。あなたが最小スパニングツリーは白のストライプの右端を正確にする必要が見つけてみましょう。トピック保証解けます。

入力形式

最初のラインV、E、それぞれ、エッジの数と必要な白エッジの数をポイントを必要とします。
S、T、Cの次E線、COLは、側端(0から基準点)、右側、色(黒0白1)を表します。

出力フォーマット

行右サイドを求めおよびスパニングツリーを表します。
V <= 50000、E <= 100000、 の正の整数【1100】されているすべてのデータエッジの重み。

サンプル

サンプル入力

2 2 1
0 1 1 1
0 1 2 0

サンプル出力

2

データ範囲とヒント

元のデータの誤差は、liutianによって更新されていますが、再テストしませんでした--- 2016年6月24日

より多くの形而上学的な質問です

ハーフ答えは、我々はそれが選択した小白側または黒側に少ない選択肢を対応させていただき、白いエッジボーナスや障害を考慮する必要があります

もしそうならkuskal + MIDがあれば、上記の値を継続する必要性よりも、白のエッジを選択した場合、現在の白エッジ減損の必要性についてダウン選択白側未満

特定kuskal図は、通信、および最小コストを保証するからです。そのため、正確さを保証するために

#include <ビット/ STDC ++ H>
 の#defineが長い長いllの
 #defineする 10000000を
 使用して 名前空間STDを、
構造体のエッジ{ 
    LLのX、Y、Z、ID。
    LLフラグ。
} E [A]。
LLのN、M、必要、FA [A]、ZONG、ANS、終了[A]。
インラインLLリード()
{ 
    LLのF = 1、X = 0チャー C = GETCHAR()。
    一方、(isdigit(C)!){ もし、(C == ' - ')、F = - 1 ; C = GETCHAR();}
     ながら(isdigit(c)参照){X = X * 10 + C- ' 0' ; C = GETCHAR();}
     戻りのF *のX。
} 
(LLのX)を見つけるllの
{ 
    場合(!FA [X] = X)FA [X] = (FA [X])を見つけます。
    戻りFAを[X]。
} 
ボイドhebing(LLのX、LLのY)
{ 
    X =(X)を見つける、Y =(y)を見つけます。    もし(!X = Y)FA [Y] =のX。
} 
BOOL CMP(辺A、辺B){ リターン(AZ == BZ)(a.flag <b.flag):( AZ <?BZ);} 
インラインボイドkuskar(LL MID)
{ 
    ため(LL I = 0 ; iが<= N; iは++ 
        FA [i]は =  I。
    ZONG= 0、ANS = 0 (LL I = 1 iが++; I <= M であれば(!E [i]は.flag)
        E [I] .Z + = ミッド。
    ソート(E + 1、E + M + 1 、CMP)。
    (LL I = 1 ; I <= M Iは++ 
    { 
        場合((E [i]は.X)=を見つける![I]、E(見つける.Y))
        { 
            場合(!E [i]は.flag)
                ZONG ++ ; 
            hebing(E [I] .X、E [I] .Y)。
            ANS + = E [I] .Z。
        }
    }
    のために(LL i = 1 ; I <= M; iは++ 場合(!E [I] .flag)
            E [i]は.Z - = ミッド。
} 
int型のmain()
{ 
    LLのTOT = 0 
    N =読み取る()、M =(読み取り)、=が必要)(読み取ります。
    (LL I = 1 ; I <= M Iは++ 
        E [I] .Xは、読み取り=()、E [I] .Y = read()は、E [I] .Z =(読み取り)、E [I ] .flag = 読み取ります(); 
    LLのL = - 100、R = 100 一方、(L <= R)
    { 
        LLミッド =(L + R)>> 1; 
        kuskar(中旬)。
        もし(ZONG> =必要)L =ミッド+ 1、TOT = ANS-必要* ミッド。
        他に、R =半ば1 
    } 
    COUT << TOT << ENDL。
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/znsbc-13/p/11202606.html