[PAT]グレード等重量の1053パス(30分)(DFS)

質問の意味:

3つの正の整数N、M、Sの数の入力ノードの数(N <= 100、M <N、S <= 2 ^ 30)は、非リーフノードの数と必要性、次の値の代表でありますM行の次の各ノードの重みの入力を表す正の整数のN個(<1000)は、2つの数の非リーフノードと数xの数代表を含む各行は、その子の数は、ノード表します数は、その後、数字xを入力して、子ノードの数を示します。ルートノードからSに等しい葉重量のために、右に順出力経路を非増加

コード:

#define HAVE_STRUCT_TIMESPEC
する#include <ビット/ STDC ++ H>
使用して名前空間std。
INT W [107]。
ベクター<整数> V [107]。
int型秒;
今int型;
ベクトル<整数>パス。
int型のフラグ。
int型VIS [107]。
ベクター<整数> ANS [107]。
int型のCNT;
INT DFS(INT X){
path.push_back(W [X])。
今+ = W [X]。
(今== S){もし
あれば(VIS [X]!)
ANS [++ CNT =パス。
path.pop_back();
NOW- = W [X]。
0を返します。
}
そうであれば(今> S){
path.pop_back()。
NOW- = W [X]。
0を返します。
}

(オートこれ:V [X])のための
DFS(IT)。
path.pop_back();
NOW- = W [X]。
0を返します。
}
int型のmain(){
IOS :: sync_with_stdio(偽)。
cin.tie(NULL)。
cout.tie(NULL)。
N INT、M。
CIN >> N >> M >> S。
以下のために(0 = I int型、iがn <; ++ I)
CIN >> W [i]は、
{ため(; I <= M + I i = 1からINT)
文字列FA。
cinを>> FA;
F = INT(FA [0] - '0')* 10 + FA [1] - '0'。
VIS [F] = 1。
int型のx;
cinを>> X;
文字列の息子。
(INT J = 1; J <= xと; ++ j)のための{
CIN >>息子。
INT S =(息子[0] - '0')* 10 +息子[1] - '0'。
V [F] .push_back(S);
}
}
DFS(0)。
ソート(ANS + 1、ANS + 1 + CNT)。
(I = CNTをint型; I; - i)について{
(iはCNTを<)場合
COUT << "の\ n"。

(INT J = 1; J <ANS [I] .size(); ++ j)のための
COUT <<」「<< ANS [I] [J]。
}
0を返します。
}

おすすめ

転載: www.cnblogs.com/ldudxy/p/11627855.html