トピックリンク:
ACコード:
1の#include <iostreamの> 2の#include <stdio.hの> 3の#include < 文字列・H> 4の#include <ベクトル> 5の#include <アルゴリズム> 6の#include <キュー> 7 使って 名前空間STDを、 8 typedefの長い 長いLL。 9 10 のconst int型 N = 30 。 11 ブールブック[N]。 12 のint F [N] で [N]、アウト[N]。 13 チャー S [ 1100 ]。 14 15 INT GETF(INT X) 16 { 17 であれば(F [X] == X) 18 リターンX。 19 リターン F [X] = GETF(F [X])。 20 } 21 22 空隙マージ(int型のx、int型のY) 23 { 24 INT T1 = GETF(X)。 25 INT T2 = GETF(Y)。 26 F [T2] = T1。 27 } 28 29 ボイドのinit() 30 { 31 memsetの(書籍、0、はsizeof (書籍)); 32 (のmemset で、0、はsizeof(中))。 33 のmemset(うち、0、はsizeof(アウト))。// 、アウト一定记得清空で 34 用(INT iは= 0 ; I < 26 ; I ++ ) 35 F [I] = I。 36 } 37 38 のint main()の 39 { 40 のint T、N。 41 のscanf(" %dの"、&T)。 42 一方(t-- ) 43 { 44 のinit(); 45 のscanf(" %d個"、&N) 46 のために(INT iは= 1 ; iが<= N; I ++ ) 47 { 48 のscanf(" %sは" 、S)。 49 INT LEN = STRLEN(S)。 50 INT X = S [ 0 ] - ' '、Y = S [len- 1 ] - ' ' 。 51 マージ(X、Y) 52 で [Y] ++、アウト [X] ++ ; 53 本の[X] = 1、書籍[Y] = 1 。 54 } 55 INT = W 0、X = 0、Y = 0、Z = 0 。 56 のために(INT iが= 0 ; I < 26 ; I ++ ) 57 { 58 であれば(ブック[I] && F [i]が== I) 59 ++ワット; 60 } 61 であれば(> = W 2 ) 62 のprintf(" ドアを開くことができない\ N。" ); 63 他の 64 { 65 のための(int型私は= 0 ; I < 26 ; I ++ ) 66 { 67 であれば(ブック[I])を 68 { 69 であれば(で、[I] =!アウト[i])と 70 のx ++ ; 71 もし(中 [I] - アウト [I] == 1 ) 72 Y ++ 。 73 であれば(アウト [I] - で [I] == 1 ) 74 Z ++ 。 75 } 76 } 77 であれば(x == 0 ) 78 のprintf(" 順序が可能である\ N。" ); 79 他の 場合(X == 2 && Y == 1 && Y == Z) 80 printf(" 発注が可能である\ nは。" ); 81 他の 82 のprintf(" ドアを開くことができません\ n個。" ); 83 } 84 } 85 リターン 0 。 86 }