1090個の危険物コンテナ(25分)
サンプル入力:
6 3
20001 20002
20003 20004
20005 20006
20003 20001
20005 20004
20004 20006
4 00001 20004 00002 20003
5 98823 20002 20003 20006 10010
3 12345 67890 23333
出力例:
No Yes Yes
アイデア:
1.アップ密輸鎖の各対
2.商品の商品ストレージの各ケースを行い、それらの商品の数は、対応する密輸があるかどうかを確認するために、各貨物のために、存在する
コードを初めて。
1の#include <stdio.hの> 2の#include <STDLIB.H> 3のtypedef 構造体ノード{ 4 INT NUM。 5 構造体ノード* 次回。 6 }ノード、* N。 7 8 N initial_node(INT X){ 9 、N、N1 =(N)はmalloc(はsizeof (ノード))。 10 N1-> NUM = X。 11 N1->次= NULL; 12の リターンN1; 13 } 14 15 int型のmain(){ 16 、INTX、Y。 17 のscanf(" %D%D "、およびX&Y)。 18 Nダン[ 100005 ] = {NULL}。 19 のために(INT iが= 0 ; I <X; I ++ ){ 20 のint X1、X2。 21 のscanf(" %D%D "、&X1、およびX2)。 22 N、N1 = initial_node(×2)。 23 N N2 = initial_node(X1)。 24 であれば(ダン[X1] == NULL)ダン[X1] = N1。 25 他{ 26 N N3 =ダン[×1]; 27 しばらく(N3->次の!= NULL)N3 = N3-> 次。 28 N3->次= N1。 29 } 30 であれば(ダン[X2] == NULL)ダン[X2] = N2。 31 他{ 32 N N3 = ダン[X2]。 33 しばらく(N3->次= NULL!)N3 = N3-> 次。 34 N3->次= N2; 35 } 36 } 37 のために(INT iが= 0 ; I <Y; I ++ ){ 38 のint kは、scanf関数(" %dの"、&K); 39 int型のリスト[ 100005 ] = { 0 }; 40 int型 [保存1004】= { 0 }; 41 int型フラグ= 0 ; 42 用の(int型 J = 0 ; J <K、J ++ ){ 43 scanf関数(" %のD "、&[J]に保存); 44 リスト[J保存] = 1 ; 45 } 46 のために(INT J = 0 ; J <K、J ++ ){ 47 であれば(ダン[保存[J]]!= NULL){ 48 N、N1 = ダン[J保存]。 49 ながら(!N1 = NULL){ 50 であれば(リスト[N1-> NUM] == 1 ){ 51 、フラグ= 1、休憩; 52 } 53 、N1 = N1-> 次。 54 } 55 であれば(フラグ)ブレーク。 56 } 57 } 58 であれば(フラグ)のprintf(" いいえ\ nは" ); 59 他のprintf(" はい\ n " ); 60 } 61 リターン 0 ; 62 }