•問題の意味
N所与の個体、Mゲーム。
これメートルのレース、すべてのゲームに2つの戦い、別の「悪いプレイヤー」に属する「良い選手」の一環。
あなたは既に確立されている「良い選手」とyの数が「悪い選手を」同定されているxは与えます。
Q.私は2つのカテゴリの一つが「良い選手」に属し、他は「悪いプレイヤー」に属しているにこれらの個人をn個のことができます。
「良い選手」と「悪いプレーヤー」に属するの一部である者がないこと。
もしそうなら、出力「YES」、逆に、出力は「NO」。
•問題解決
2のすべてのゲームのために$ U、Vの$、$ uはRIGHTARROWのVの\を\でも双方向側、の\ V \ RIGHTARROW U $;
そして、DFS染色。
それらの既に識別$ X + Yの$で始まる、人々、矛盾出力「NO」に関連した染色、始まりました。
そして、人々のための不確実、列挙染色、矛盾出力「NO」。
矛盾が存在しない場合は、出力「YES」。
•コード
コードの表示1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 のconst int型 N = 1E3 + 50 。 4 のconst int型 M = 1E4 + 50 。 5 6 INTのN、M、X、Y。 7 のint NUM; 8 int型ヘッド[N]。 9 構造体のエッジ 10 { 11 INT に、 12 int型の次。 13 } G [M << 1 ]。 14 ボイド addEdge(int型のu、int型V) 15 { 16 G [NUM] = {V、ヘッド[U]}。 17 頭[U] = NUM ++ 。 18 } 19 のint COL [N]。/// 0:良好、1:不良 20 のint G [N]。 21 int型B [N]。 22 BOOL OK。 23 24 空隙 DFS(int型 U、int型のフラグ) 25 { 26 COL [U] = フラグ。 27 のために(int型、〜iは&& OK;!私=私は=頭部[U] G [i]は.next) 28 { 29 INT= V G [I] .TO; 30 31は、 IF(COLが[V] == - 1 ) 32 DFS(V、^内のフラグ。1 )、 33は 34れる IF(COL [V] == COL [U])/// U、Vの反対、もしCOL [U] = COL [V ] 矛盾現れる 35 OK = trueにする; 36 } 37 } 38である CHAR * )(解決 39 { 40 のために(INT I = 1 ; Iは、= Xを<; ++ I) 41は 、{ 42が INT U = G [I]; 43は OK =偽; 44 であれば(COL [U] == - 1 ) 45 DFS(U、0 ); 46 であれば(OK || COL [U] == 1 ) 47 リターン " NO " 。 48 } 49 のための(int型 i = 1 ; iは= yと<; ++ I) 50 { 51 INT U = B [i]は、 52 であれば(COL [U] == - 1 ) 53 DFS(U、1 )。 54 55 もし(OK || COL [U] == 0 ) 56 リターン " NO " 。 57 } 58 のための(int型 i = 1 ; iは= N <; ++ I) 59 { 60 = OK 偽。 61 であれば(COL [I] == - 1 &&ヘッド[I] =! - 1 ) 62 DFS(I、0 ); 63 64 もし(OK) 65 リターン " NO " 。 66 } 67 リターン 「YES 」。 68 } 69 ボイドは、init() 70 { 71 NUM = 0 。 72 のためには、(int型 = Iを0 ; iが= N <; ++ I) 73 { 74 COL [I] = - 1 。 75 [I] =ヘッド- 1 。 76 } 77 } 78 のint main()の 79 { 80 // freopenは( "C:\\ユーザー\\ hyacinthLJP \\デスクトップ\\で&&アウト\\コンテストC ++ワークスペースを\\"、 "R"、STDIN)。 81 一方、(〜のscanf(" %D%D%D%D "、&N、&M、およびX&Y)) 82 { 83 は、init(); 84 のために(int型 I = 1 ; I <= M; ++ i)が 85 { 86 のint U、V。 87 のscanf(" %D%dの"、&U、およびV)。 88 addEdge(U、V); 89 addEdge(V、U)。 90 } 91 のために(INT i = 1 ; iは= xを<; ++ I) 92 scanf関数(" %dの"、G + I)。 93 のために(int型 i = 1 ; iが= Yを<; ++ i)が 94 のscanf(" %dの"は、B + I)。 95の プット((解決))。 96 } 97 リターン 0 。 98 }