貪欲CCPCネットワークゲームhdu6705パス(キューシミュレーション

http://acm.hdu.edu.cn/showproblem.php?pid=6705

これは、ゲーム8前の質問の第二の数が少ない問題を抱えていたので、彼らが出てくるが、気持ちは口で言うされていません。(恐怖が困難に署名していません

質問の意味:マップに、選択肢のカップルに、あなたが最初のk短絡を見つけて、すべてのパスは使用回数に制限はありません。

アイデア:最短は確かに短い作品、第2のショートで、二つの可能性があるが、それは二枚の短い長さであってもよいし、その後、2つだけではないでしょう(最短取るためにそこに継続することができるが、この最初のもしK + 1条:)拡大、第三のショートに本当に可能2である(例えば、1,2,9,1 + 2 <9)、ほとんど明らかにk個のk個のセグメントを短絡することにより(矛盾を構成します、段落のK + 1は、もう少しスローされますことを、それは)確かに最善ではないので、直接サイクルMAX(k)の時間、私はi番目のサイクルのセグメントは、ライン上のアップデートへの道を占めました。あなたはプライオリティキューを開始することができ、およびパスエンドの長さの合計は、構造体を装着しました。

#include <ビット/ STDC ++ H> 
名前空間STDを使用して、
typedefの長い長いLL。
CONST int型N = 5E4 + 10。
構造体ノード{ 
    LENにLL。
    ノード(){} 
    ノード(-1,11,11-のB)から(A)、LEN(B){} 
}。
構造体CMP { 
    ブール演算子()(CONSTノード&X、CONSTノード&Y)のconst { 
        y.len x.len>返します。
    } 
}。
BOOL器CMP1(ノードA、ノードB){ 
    a.len <b.len返します。
} 
PRIORITY_QUEUE <ノード、ベクトル<ノード>、CMP> Q0。
PRIORITY_QUEUE <整数> Q1。
ベクター<ノード> VEの[N]。
LL [N]、B [N]。
init(int型のn){無効
    しばらく(!q1.empty())q1.pop(); 
    (!q0.empty())q0.pop()しばらく;
    [I] .clear()VEのために(; iは<= n iは++ i = 1 INT)。
}
INTメイン(){ 
    IOS :: sync_with_stdio(0)。
    cin.tie(0)。
    cout.tie(0)。
    LLのトン。
    cinを>>トン。
    { - (T)一方
        、LL N、M、K 
        CIN >> N >> M >> K。
        INIT(N)
        {(; I <= M I ++はLL I = 1)のための
            LL U、V、W。
            CIN >> U >> V >>ワット。
            q0.push({V、W})。
            q1.push(W)。
            [U] .push_back(ノード(V、W))まし。
        } 
        ため(LL i = 1; iが<= N; iは++){ 
            ソート(CMP1を、[I] .begin()VEの[I] .END()VE)。
        } 
        LL MX = 0。
        用(LL i = 0; iはK <; iは++){
            CIN >> [i]は、
            MX = MAX(MX、[I])。
        }
        用(LL I = 1; I <= MX; iは++){ 
            B [I] = q0.top()LEN。
            LL X = q0.top()へ。
            q0.pop(); 
            (INT J = 0; J <)[X] .size(まし; J ++)用{ 
                LL Y = [X] [J] .TO VEの、lenは= bの[I] + VEの[X] [J] .LEN ; 
                IF(q1.size()== MX){ 
                    場合(LEN> q1.top())ブレーク。
                    他{ 
                        q1.pop()。
                        q1.push(LEN)。
                        q0.push({Y、LEN})。
                    } 
                } 
                他{ 
                    q1.push(LEN)。
                    q0.push({Y、LEN})。
                }  
            } 
        }
        (LL i = 0; I <K; iは++)用COUT << B [I]] << ENDL。
    } 
    0を返します。
}

 

おすすめ

転載: www.cnblogs.com/wzgg/p/11410161.html