1の#include <iostreamの> 2の#include <CStringの> 3 使用して 名前空間STDを、 4 5 int型のヘッド[ 101 ]。 6 int型のCNT; 7 8 構造体のエッジ 9 { 10 のint 次U、。 11 } E [ 10010 ]。 12 13 空隙追加(INT U、INT V) 14 { 15 E [++ CNT] .U = V。 16 E [CNT] .next = 頭部[U]。 17 ヘッド[U] = CNT。 18 } 19 20 INT N。 21 ブール SC [ 51 ]。 22 BOOL HO [ 51 ]。 23 BOOL VIS [ 51 ]。 24 int型の一致[ 51 ]。 25の 26の BOOL DFS(INT X) 27 { 28 のための(int型 I =ヘッド[X]; I =! - 1 ; I = E [I] .next) 29 { 30 なら!(VIS [E [I] .U ]) 31 { 32 VIS [E [i]は.U] = 真。 33 であれば(一致[E [i]は.U] ||!DFS(一致[E [I] .U])) 34 { 35 一致[E [i]は.U] =のX。 36 リターン 真。 37 } 38 } 39 } 40 リターン 偽。 41 } 42 43 INT T。 44 int型のTOT; 45 46 のint main()の 47 { 48 CIN >> T; 49 一方(T-- ) 50 { 51 のmemset(ヘッド、 - 1、はsizeof (ヘッド))。 52 CNT = 0 。 53 TOT = 0 。 54 CIN >> N。 55 のために(int型 i = 1 ; iが<= N; iが++ ) 56 { 57 CIN >> SC [I]。 58 } 59 のために(INT I = 1; I <= N。I ++ ) 60 { 61 CIN >> HO [I]。 62 であれば(HO [I] &&!SC [I]) 63 { 64 追加(I、I)。 65 } 66 } 67 のための(int型 i = 1 ; iが<= N; iが++ ) 68 { 69 なら TOT ++(SC [I] || HO [I] && SC [I]!) 。 70 } 71 のための(int型 i = 1 ; iは= N <; ++ I) 72 { 73 のための(INT J = 1 ++; J <= N J) 74 { 75 のint T。 76 cinを>> トン。 77 あれば(T && SC [J])は(i、j)を加えます。 78 } 79 } 80 のmemset(一致、0、はsizeof (一致))。 81 int型 CNT = 0 。 82 のために(int型 i = 1 ; iが<= N iが++ ) 83 { 84 であれば(SC [I] && HO [I] ||!SC [I]) 85 { 86 のmemset(VIS、偽、はsizeof (VIS))。 87 もし(DFS(i))をCNT ++ ; 88 } 89 } 90 であれば(CNT == TOT)COUT << " ^ _ ^ " << ENDL。 91 他の裁判所未満<< " T_T " << てendl; 92 } 93 }