質問の意味:あなたのエッジがすべてのサブグラフの最大の独立したセットを頼むあなたに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。 }