D - バグズライフ2部グラフ互いに素セット
背景
教授ホッパーは、バグの希少種の性行動を研究しています。彼は、彼らが2人の異なる性別を備えていることを、彼らは唯一の反対の性別のバグと相互作用することを前提としています。番号が背中にプリントされたため、彼の実験では、個々のバグとその相互作用は、識別することが容易でした。
問題は、
バグの相互作用のリストを考えると、それはそれを改ざんするいくつかのバグの相互作用が含まれている場合、実験はなし同性愛者のバグを持つ2人の男女の彼の仮定をサポートしているかどうかを決定します。
教授ホッパーは、バグの希少種の性行動を研究しています。彼は、彼らが2人の異なる性別を備えていることを、彼らは唯一の反対の性別のバグと相互作用することを前提としています。番号が背中にプリントされたため、彼の実験では、個々のバグとその相互作用は、識別することが容易でした。
問題は、
バグの相互作用のリストを考えると、それはそれを改ざんするいくつかのバグの相互作用が含まれている場合、実験はなし同性愛者のバグを持つ2人の男女の彼の仮定をサポートしているかどうかを決定します。
入力
入力の最初の行は、シナリオの数を含んでいます。各シナリオは、1行単一のスペースで区切られたバグの数(少なくとも一つ、2000まで)及び(1000000まで)の相互作用の数を与えることから始まります。次の行では、各相互作用は単一のスペースで分離された2つの別個のバグ数の形で与えられます。バグは、1から始まる連続した番号が付けられます。
出力
どちらかと言う1行に続いて、私は1から始まるシナリオの数である:すべてのシナリオの出力は、「シナリオの#I」を含む行が「NO不審なバグが見つかりません!」実験は、バグ性的行動、またはについての彼の仮定と一致している場合は、 『見つかった不審なバグ!』教授ホッパーの仮定は間違いなく間違っている場合。
サンプル入力
2 3 3 1 2 2 3 1 3 4 2 1 2 3 4
どちらの方法
1:決意二部グラフは、グラフ部グラフを構成あれば問題がない、そうでない問題があります
書式#include <iostreamの> の#include <cstdioを> する#include <ベクトル> の#include <キュー> の#include <CStringの> 使用して 名前空間はstd; const int型 N = 2000 + 7 。 ベクター < INT > VEの[N]。 int型のマーク[N]。 ブールフラグ= 偽。 BOOL BFS(INT X){ キュー < INT > QUE。 que.push(X)。 マーク[X] = 1 。 同時に(que.size()){ int型 X1 = que.front()。 que.pop(); 以下のために(int型 i = 0 ;)(iはVEの<[X1] .sizeと、iは++ ){ int型 DX = VEの[X1] [I]。 もし(マーク[X1] == 1 ){ 場合(マーク[DX] == 1) を返す 真。 そう であれば(マーク[DX] == 0 ){ マーク[DX] = 2 ; que.push(DX)。 } } 他{ 場合(マーク[DX] == 2)を返す 真。 そう であれば(マーク[DX] == 0 ){ マーク[DX] = 1 。 que.push(DX)。 } } } } を返す 偽。 } int型のmain(){ int型、T、K = 0 。 cinを >> トン。 一方、(t-- ){ フラグ = 偽。 int型N、M。 K ++ ; scanf関数(" %d個の%のD "、&N、&M)。 memsetの(マーク、0、はsizeof (商標))。 以下のために(int型私= 1 ; iが<= N; iが++ ){ )[I] .clear(まし。 } のために(int型 I = 1 ; I <= M; iは++ ){ int型のX、Y。 scanf関数(" %dの%のD "、およびX&Y)。 VEの[X] .push_back(Y)。 VEの[Y] .push_back(X)。 } 以下のために(int型 i = 1 ; iは= N <; iは++ ){ 場合(マーク[I] == 0 ){ 場合(BFS(I)){ フラグ = 真。 破ります; } } } のprintf(" シナリオ#1%のD:\ N " 、K)。 もし(フラグ)プット(「不審なバグが見つかりました!」); 他のプット(「見つかりませんでした不審なバグ!」); プット("" ); } 戻り 0 。 }
2互いに素セット