問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
このチャプターでは、グラフ理論における完全二分木を扱います。
二分木とは、根付き木の一種で、各頂点が持つ子の数が 2 であるようなもののことです。
子が 2 つであるため、子は「左の子」「右の子」と区別することが多いです。
例として、以下のような頂点 A, B, C があったとき、A は B と C の親、B は A の左の子、C は A の右の子となります。
完全二分木では、要素数は必ず 2^n - 1 (n は非負整数) であり、根から一番下までの間の木全体の形が一意に定まるため、次のような規則にしたがって頂点を管理することで、1 つの配列で完全二分木の情報を管理することができます。
完全二分木の頂点数を 2^n - 1 とする。
要素数が 2^n - 1 の配列 g を宣言する。
g[0] に根の頂点を格納し、以後、g[i] の左の子を g[2*i + 1] , 右の子を g[2*i + 2] に格納する。
N K R
a_1 b_1 LR_1
...
a_{N-1} b_{N-1} LR_{N-1}
v_1 lr_1
...
v_K lr_K
・合計で K 行出力してください。
・i 行目では、lr_i が 'L' のとき v_i の左の子の頂点番号を、'R' のとき v_i の右の子の頂点番号を出力してください。(1 ≦ i ≦ K)
すべてのテストケースにおいて、以下の条件をみたします。
・1 ≦ N ≦ 100
・1 ≦ K ≦ 100
・1 ≦ R ≦ N
・1 ≦ a_i , b_i ≦ N (1 ≦ i ≦ N-1)
・a_i では、既に親が決まっている頂点の番号のみが与えられる。
・LR_i は 'L' または 'R'(1 ≦ i ≦ N-1)
・1 ≦ v_i ≦ N (1 ≦ i ≦ K)
・lr_i は 'L' または 'R'(1 ≦ i ≦ K)
3 1 5
5 3 L
5 1 R
5 L
3
7 3 1
1 2 L
1 3 R
2 4 L
2 5 R
3 6 L
3 7 R
1 R
2 L
3 L
3
4
6