Codeforces 1221 Gグラフと数字

フェイス質問

 

    質問のうちわずか11人は、一般的に暴力を行うには、このゲームは難しいですとき、私は私がWWWを出す方法がわかりません

    直接のカウントエッジの少なくとも3種類があるが、2333年はさらに困難プログラムの数を持っていながら、このトピックを読んで最初感が包含と除外にあり、少なくともプログラムの特定の側面は、見つけるのがより困難がありましたさ

    だから、反対側の面の除外から考えます

    三元側として表さ組の三種類が存在し、少なくとも1表すがあるが、0 [撥容量:?F [111] = Fを得ることができ、制限側は存在しないことを示している、無示し???] - (F [0 ??] + F [0] + F [?? 0] ??)+(F [00] +のF [0] + F [00] ') - F [000]

    関係の証明は二項係数によって誘導されることができ、N次元形状に拡張することができます。

    すべてのF [] [より良いを求めている(しかし、それはアルゴリズムの多くを含むことになる)が、Fの一部は、[](図の対称性に基づいて利用可能)のアイデンティティであるので、すべてのFを行うことに注意を明らかに平等な権利]機能演算子を記述する必要があります。この質問へのコードの[]貢献最も量F等号演算子の右側には、言いたいことが一つ一つが存在しない、私はあなたがHHHHHを考えることができると信じて

    最後に、ノートF [000]場合に限り、M == 0の場合、[000] = 2 ^ N F、そうでない場合、[000] F = 0。

    私はWAので、これを開始し、各辺が(私は仲間で仲間をreallよ)いなかった、それをf [000] = 0であることを許可されたためにそれを取ることができません。

 

 

#include <ビット/ STDC ++ H> 
の#defineは長い長いllの
名前空間stdを使用します。
const int型N = 1200005; 

[N]、F、M、M、V [55]、P [55]、N int型。
ブールG [55] [55]。
すべて、ANS LL; 

インラインBOOLは、(int型のS、INT広告){でき
	ため(; iはMを<; I = 0 int型I ++)
	    のための(INT J = I + 1、J <M、J ++)(gは[Iが広告を+]場合は[Jの+広告] &&((1 << I)&S)&&((1 << J)&S))の戻り0; 
	1を返します。
} 

インラインボイドGet1(){ 
	用(INT S = 0; S <(1 << M); S ++)場合(CAN(S、0))[S] ++ F。
} 

インラインボイドは(){を維持
	(; iがMを<I ++は、I = 0をINT)ため
	    !(((1 << I)&J)場合ため(J ++ INT J = 0; J <(1 << M)) )F [J |(1 << I)] + = F [J]。
} 

Get2 LLインライン(){ 
	= 0 LL。
	(int型S = 0のために、今、
		今= 0; 
		    のための(INT J = 0; J <M、J ++)IF今(G [I] [J])| = 1 << J; 
		AN + = F [アル^今]; 
	} 
	ANを返す; 
} 

インラインsolve1 LL(){ 
/ *ミート途中で:
        ハーフ:列挙及び法的バイナリ治療FMT(同様の高次元の各次元プレフィックスの範囲及び{0,1})
		      すべてのバイナリその含んにマッピングされ
		      
		、他の半分を:列挙法的バイナリ、直接FMTがOKに加えアレイに対応する位置に
* / 	 
	GET1(); 
	更新(); 
	(Get2を返す); 
} 

int型getfa(INT X){[X] X X == Pを返します:? (P [X] = getfa(P [X]));} 

インラインLLのsolve2(){ 
	LL AN = 1; 
	P [I] = Iと、(; I <N-I ++はI = 0の整数)のための
	
	(INTためI = 0、FA、FB、I <N - 、I ++)は
	    (INT Jため= I + 1、。J <N-; J ++)IF(G [I] [J]){ 
	    	FA = getfa(I)、FB = getfa (J)、 
	    	(!FA = FB)IF P [FA] = FB; 
		}
	
	以下のために(INT i = 0; iがn <; iは++)IF(V [getfa(I)] = 2!)V [P [I] = 2、<< = 1。
	
	返します。
} 

インラインのLL solve3(){ 
	= 1 LL。
	
	以下のために(INT i = 0; iがn <; I ++)
	    のための(INT J = I + 1、J <N; J ++)IF(G [I] [J])V [I] = V [J] = 3; 
	IF(V [I] = 3!)<< = 1(; iがn <I ++は、I = 0をINT)。
	
	返します。
} 

BOOL色(int型のx、int型のC){ 
	V [X] = Cを、
	(G [X] [I])であれば(私は++; iがN <I = 0の整数)のための
	    IF(V [I] == V [X])戻り0; 
	    他の場合(V [i]が<4 &&色(I、9-C)!)戻り0; 
	1を返します。
} 

インラインのLL solve4(){ 
	= 1 LL。
	
	(V [I] <4)であれば(私は++; iがN <I = 0の整数)のための
	    (!色(I、4))であれば0を返します。他<< = 1; 
	
	返します。
}
 
{main()のint型
	scanf関数( "%dの%のD"、&N、&M)、すべて=(1LL << N)-1、M = N + 1 >> 1。
	IF(!M)ans- =全+ 1; // 000タイプ
	のための(; M; INT U、V M--)
	    のscanf( "%D%dの"、&U&V)、U - 、V-- 、G [V] [U] = G [U] [V] = 1。
	
	ANS + =すべて+ 1; // ??? 入力
	ans- = 2 * solve1(); // 0?そして?? 0タイプ、その対称性を引き起こし、我々は単にANS倍増することができます
	ans- = solve2()を; // 0?
	ANS + = 2 * solve3(); // 00と00?タイプ、同様に()solve1する
	ANS + = solve4(); // 0型
	
	COUT << ANS << ENDL。
	0を返します。
}

  

おすすめ

転載: www.cnblogs.com/JYYHH/p/11574118.html