注:単に「友人の輪」をインストールすることはできません何の友人は、それは友人の自身の円の中に一人だけになることはできません。ありますが、個々のナルシストを繰り返し追加友人の自分のサークルを所有することになるが、問題はすべてのことを確実にするためにK
、友人の上で1つの円は、少なくとも二つの異なる人々を持っています。
ノー友人順次入力を持っている人にハンサム出力。パーティションIDとの間のスペース、そして最後の行に余分なスペースを持っていないかもしれません。誰がハンサムでない場合は、出力No one is handsome
。
注:同じ人が複数回照会することができますが、出力のみ一度
サンプル入力1:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
8
55555 44444 10000 88888 22222 11111 23333 88888
出力サンプル1:
10000 88888 23333
サンプル入力2:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
4
55555 44444 22222 11111
出力サンプル2:
No one is handsome
2を持っている友達が注意していない、1は友人の唯一の自分のサークルで、一つは単純に表示されていません、
このテーマは、マップを使用するだけでなく、デエンファシスの非ソートされた配列を含む(ソートの後、それがセットに直接、または配列中のユニーク動作です)
あなたはそれをマークする必要がある配列をノンソート。
コード:
1の#include <ビット/ STDC ++ H>
2 使用して 名前空間STDを、
3 CONST INT MAXN = 1E5 + 10 。
4 CONST INT INF = 0x3f3f3f3f 。
5
6 弦NUM [MAXN]。
7 列ANS [MAXN]。
8
9マップ< 文字列、整数 > M、F。
10
11 のint main()の
12 {
13 INT N。
14 のscanf(" %d個"、&N)
15 のために(INT I = 1 ; I <= N-I ++ )
16 {
17。 int型のX;
18は scanfの(" %のD "、&; X)
。19 列CNT;
20である ため(INT J = 1。 ; J <= X。 ++ J )
21は 、{
22は CIN >> CNT;
23である IF(X == 1 && M [CNT] == 0)// のみ、又はこの場合ない
24 M [CNT] = INF;
25 他 M [CNT] ++ ;
26である }
27 }
28 ; INT Q
29 scanfの(" %のD "、&Q);
30 のint = K 0 、
31である ため(INT I = 1 ; I <= Q; I ++){ // 再配列にクエリ
32 列R&LT;
33である CIN >> R&LT;
34は、 IF(F [R&LT] == 0 ){
35 F [R&LT] = 1 ; // タグ
36 NUM [K ++] =R;
37 }
38 }
39 のint L = 0 。
40 のために(INT iが= 1 ; I <= K; I ++ ){
41 であれば(M [NUM [I]] == 0 || M [NUM [I]] == INF)
42の ANS [++ L] = NUM [i]は、// 存到ANS里
43 }
44 であれば(L == 0)COUT << " 誰がハンサムではない" << ENDL。
45 他{
46 のために(INT I = 1; I <L、I ++ )
47 COUT << ANS [I] << " " 。
48 COUT << ANS [L] << ENDL。
49 }
50 }