C ++プライオリティキューの例

#pragma GCCの最適化(3)
の#include <ビット/ STDC ++ H>
 に#define N 105
 使用して 名前空間STDを、
構造体ノード{
     長い 長いX。
    int型マックス。
    ビットセット <N> AVL、VIS; 
    フレンドブール 演算子 <(constのノード&L、CONSTノード&R){
         戻り LX> RX。
    } 
}。
INT [N]。
int型N、K。
チャーS [N]。
PRIORITY_QUEUE <ノード> S;
長いです 長いANS; 
ビット集合 <N> P [N]。
INT メイン(){ 
    scanf関数(" %d個の%のD "、&​​N&K)。
    K - ;
    もし(Kの== 0 ){ 
        プット(" 0 " )。
        リターン 0 ; 
    } 
    のためのint型 i = 1 ; iが<= N; iが++)のscanf(" %dの"、および[I])。
    int型 i = 1 ; iが<= N iが++ ){ 
        scanf関数("%S "、S + 1 のためのint型 J = 1 ; J <= N; J ++)場合(S [j] == ' 1 ')P [I] [J] = 1 ; 
    } 
    のためにint型のI = 1 ; iが<= N; iが++ ){ 
        ノードTMPを、
        tmp.xは = [I]; 
        tmp.avl = P [I]は[I] tmp.vis = 1 ; 
        tmp.Max = I; 
        S.push( TMP); 
    } 
    ながら!( = S.empty()){
        ノードU S.top()。
        S.pop(); 
        ANS = UX; 
        K - ;
        もし(!K){ 
            のprintf(" %LLDする\ n " 、ANS)。
            リターン 0 ; 
        } 
        のためのINT J = u.Max + 1、J <= nであり、j ++ ){
             場合(u.avl [J]){ 
                ノードv。
                VX = UX + [J]。
                v.avl = u.avl&P [J]。
                v.vis [J] = 1; 
                v.vis | = u.vis。
                v.Max = J; 
                S.push(V); 
            } 
        } 
    } 
    プット(" -1 " )。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/godoforange/p/11225001.html