サマースクールキャンプオフ以上の2019頭の牛(第五)E.independentは(圧力DPのような)1セット

質問の意味:あなたのエッジがすべてのサブグラフの最大の独立したセットを頼むあなたにn点mを与え、

アイデア:私たちは、F状態を設定することができ、我々は二つの部分にセットを置くことができるので、ポイントのセット内の現在の最大の独立集合の大きさで、これは絶対に絶対に何度も何度もこの点を含んでいない点と、その後、2例最大で含まれてい

オープンスペースではタイトなので、私たちはcharの配列を使用する必要があります

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
constの ダブル PI = ACOS( - 1.0 )。
CONSTの INT N = 1E5 + 7 const  int型 INF = 0x3f3f3f3f constの ダブル EPS = 1E- 6 
typedefの長い 長いLL。
CONST LL MOD = 1E7 + 9 int型の E [ 27 ]。
CHAR [F 1 << 26 ]。
char型の最大値(char型char型B){
     場合(> b)に戻ります他の リターンB; 
} 
int型のmain(){ 
    IOS :: sync_with_stdio()。
    cin.tie(0)。cout.tie(0 )。
    INTの N、M。CIN >> N >> M。
    以下のためにint型 iは= 1 ; iが<= M; iは++ ){
         int型、B。CIN >> A >> B; 
        E [A] =(E [A] |(1 << b)参照)。
        E [B] =(E [B] |(1 << a)参照)。
    } 
    のためにint型 I = 0 iがN <; Iは++ ){ 
        E [I] =(E [I] |(1 << I))。
        E [i]は =(〜E [i])と、
    } 
    LL ANS = 0 
    F [ 0 ] = 0 ;
    以下のためにint型 i = 1 ;(iは< 1個の << N)、iは++ ){
         int型の経口;
        INT J = 0 ; J < 26 ; J ++ 場合((I >> J)&1 ){ 
                PO =J;
                破ります; 
            } 
        F [I] = MAX(F [I ^(1 << PO)]、F [(I&E [PO])] + 1 )。
        ANS + = F [i]は、
    } 
    COUT << ANS << ENDL。
}

 

おすすめ

転載: www.cnblogs.com/wmj6/p/11317584.html